diff --git a/404.html b/404.html index 10ea45b79b4..b4eff46c733 100644 --- a/404.html +++ b/404.html @@ -7,13 +7,13 @@ - +
Skip to main content

Page Not Found

We could not find what you were looking for.

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

- + \ No newline at end of file diff --git a/ar/404.html b/ar/404.html index 8f03be862cc..1158de2d9e3 100644 --- a/ar/404.html +++ b/ar/404.html @@ -7,13 +7,13 @@ - +
Skip to main content

Page Not Found

We could not find what you were looking for.

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

- + \ No newline at end of file diff --git a/ar/assets/js/363609e7.74d4892a.js b/ar/assets/js/363609e7.74d4892a.js new file mode 100644 index 00000000000..4d9093d2d64 --- /dev/null +++ b/ar/assets/js/363609e7.74d4892a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[918],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});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 s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=a,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/ar/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/ar/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/ar/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/ar/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,a.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,a.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,a.kt)("hr",null),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,a.kt)("em",{parentName:"a"},"Summarized"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,a.kt)("em",{parentName:"a"},"Full Length")))),(0,a.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,a.kt)("hr",null),(0,a.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,a.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,a.kt)("a",{parentName:"h3",href:"/ar/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,a.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,a.kt)("hr",null),(0,a.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,a.kt)("h3",{id:"--core-protocol-development"},"- ",(0,a.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ar/assets/js/363609e7.f6792e8f.js b/ar/assets/js/363609e7.f6792e8f.js deleted file mode 100644 index d3bd087faed..00000000000 --- a/ar/assets/js/363609e7.f6792e8f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[918],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/ar/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/ar/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/ar/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/ar/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/ar/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ar/assets/js/runtime~main.99401df2.js b/ar/assets/js/runtime~main.63ed5f63.js similarity index 72% rename from ar/assets/js/runtime~main.99401df2.js rename to ar/assets/js/runtime~main.63ed5f63.js index 8a0fabe613a..07192532113 100644 --- a/ar/assets/js/runtime~main.99401df2.js +++ b/ar/assets/js/runtime~main.63ed5f63.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,d,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={exports:{}};return b[e].call(f.exports,f,f.exports,r),f.exports}r.m=b,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",83:"b6f38314",129:"3eeefb85",216:"f4f68926",234:"fe7eaba3",577:"78378cd2",636:"1bdef35d",641:"7d22b903",918:"363609e7",947:"fd0fca33",1020:"245628ab",1185:"97a4dd3a",1539:"78296b4c",1640:"d93bdb62",1784:"399aecfb",1870:"486aefad",2169:"0fbc7aca",2189:"021fdf0c",2590:"3adedf19",3085:"1f391b9e",3229:"2b19e1f6",3232:"6928f4d3",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3576:"71afd08c",3585:"83dc8527",3697:"2585a6eb",4177:"7bb6992d",4250:"472175da",4258:"bc1252d5",4295:"d0dc5c00",4409:"0cf1c049",4499:"872a0e8c",4856:"6843330a",4868:"3a8f952f",4942:"44f776e2",5083:"dc61d921",5145:"7d8566c6",5341:"e2312bd7",5624:"2f7aafd6",5698:"44a811a8",5809:"28ea47eb",5834:"70bc845e",6043:"0ed41b0c",6105:"3a0aff13",6396:"d8004759",6752:"71dde77b",6966:"a91dd230",7123:"e3a371a5",7178:"37cee8af",7214:"cd1cc54a",7370:"c09f4ff7",7414:"393be207",7761:"85638e0b",7793:"ee9cb384",7918:"17896441",7971:"b33984a9",8024:"01b6f00b",8038:"497d7304",8131:"bcb2e6e6",8243:"1eca5a47",8437:"5d99779a",8469:"c3a04ceb",8508:"4ab0e188",8566:"95961fbd",8798:"4085c560",8925:"ba2b348f",9204:"38de275b",9514:"1be78505",9747:"ea4ac3f6",9817:"14eb3368"}[e]||e)+"."+{53:"7f51f478",83:"28ed8fb1",129:"3e37d4f9",216:"fef6aacb",234:"2088b689",577:"f50cf1d8",636:"eeb943fd",641:"b605e7a9",814:"dc8c3a26",918:"f6792e8f",947:"307826ea",1020:"a4dcab2f",1185:"66fd7578",1539:"683dd69d",1640:"3b9bfe10",1784:"cb2caecb",1870:"bd2bbd74",2169:"66249d0c",2189:"7426d272",2590:"fd66b1de",3085:"3a447380",3203:"d4e13d9e",3229:"c4a0c786",3232:"be4aa104",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3576:"f1078b74",3585:"66c79227",3697:"1b9b6f47",4177:"25464cae",4250:"6050b9d5",4258:"e9f82eae",4295:"3ac4e2fa",4409:"36893300",4499:"7ab9dfeb",4856:"75e923ba",4868:"8dc4a2e9",4942:"8b5cd46a",4972:"4a54fd4a",5083:"239987e7",5145:"1130c785",5341:"23fc26cd",5624:"36472c3f",5698:"f0df5939",5809:"382eaa95",5834:"d7d124e5",6043:"8dabda10",6105:"421ba05f",6396:"a14e5c35",6752:"10db0348",6966:"573ed0e8",7123:"87bb24e0",7178:"6e73e142",7214:"b8b85909",7370:"68e43d73",7414:"e250e0cb",7761:"1fd0753a",7793:"6cf54420",7918:"e3da5265",7971:"0fa14a25",8024:"79b8547b",8038:"98fdb8a9",8131:"110c8fbf",8243:"6c725d90",8437:"20075f22",8469:"69b9cc30",8508:"4881f4f1",8566:"d7479bd1",8798:"0b0898d2",8925:"fa85ced9",9204:"31eac9cb",9514:"478c02c6",9747:"258a1d84",9817:"b7ea7ab7"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},c="portal:",r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/ar/",r.gca=function(e){return e={17896441:"7918","935f2afb":"53",b6f38314:"83","3eeefb85":"129",f4f68926:"216",fe7eaba3:"234","78378cd2":"577","1bdef35d":"636","7d22b903":"641","363609e7":"918",fd0fca33:"947","245628ab":"1020","97a4dd3a":"1185","78296b4c":"1539",d93bdb62:"1640","399aecfb":"1784","486aefad":"1870","0fbc7aca":"2169","021fdf0c":"2189","3adedf19":"2590","1f391b9e":"3085","2b19e1f6":"3229","6928f4d3":"3232",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","71afd08c":"3576","83dc8527":"3585","2585a6eb":"3697","7bb6992d":"4177","472175da":"4250",bc1252d5:"4258",d0dc5c00:"4295","0cf1c049":"4409","872a0e8c":"4499","6843330a":"4856","3a8f952f":"4868","44f776e2":"4942",dc61d921:"5083","7d8566c6":"5145",e2312bd7:"5341","2f7aafd6":"5624","44a811a8":"5698","28ea47eb":"5809","70bc845e":"5834","0ed41b0c":"6043","3a0aff13":"6105",d8004759:"6396","71dde77b":"6752",a91dd230:"6966",e3a371a5:"7123","37cee8af":"7178",cd1cc54a:"7214",c09f4ff7:"7370","393be207":"7414","85638e0b":"7761",ee9cb384:"7793",b33984a9:"7971","01b6f00b":"8024","497d7304":"8038",bcb2e6e6:"8131","1eca5a47":"8243","5d99779a":"8437",c3a04ceb:"8469","4ab0e188":"8508","95961fbd":"8566","4085c560":"8798",ba2b348f:"8925","38de275b":"9204","1be78505":"9514",ea4ac3f6:"9747","14eb3368":"9817"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>d=e[a]=[f,c]));f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n{"use strict";var e,a,f,c,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={exports:{}};return b[e].call(f.exports,f,f.exports,r),f.exports}r.m=b,e=[],r.O=(a,f,c,d)=>{if(!f){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[f,c,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",83:"b6f38314",129:"3eeefb85",216:"f4f68926",234:"fe7eaba3",577:"78378cd2",636:"1bdef35d",641:"7d22b903",918:"363609e7",947:"fd0fca33",1020:"245628ab",1185:"97a4dd3a",1539:"78296b4c",1640:"d93bdb62",1784:"399aecfb",1870:"486aefad",2169:"0fbc7aca",2189:"021fdf0c",2590:"3adedf19",3085:"1f391b9e",3229:"2b19e1f6",3232:"6928f4d3",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3576:"71afd08c",3585:"83dc8527",3697:"2585a6eb",4177:"7bb6992d",4250:"472175da",4258:"bc1252d5",4295:"d0dc5c00",4409:"0cf1c049",4499:"872a0e8c",4856:"6843330a",4868:"3a8f952f",4942:"44f776e2",5083:"dc61d921",5145:"7d8566c6",5341:"e2312bd7",5624:"2f7aafd6",5698:"44a811a8",5809:"28ea47eb",5834:"70bc845e",6043:"0ed41b0c",6105:"3a0aff13",6396:"d8004759",6752:"71dde77b",6966:"a91dd230",7123:"e3a371a5",7178:"37cee8af",7214:"cd1cc54a",7370:"c09f4ff7",7414:"393be207",7761:"85638e0b",7793:"ee9cb384",7918:"17896441",7971:"b33984a9",8024:"01b6f00b",8038:"497d7304",8131:"bcb2e6e6",8243:"1eca5a47",8437:"5d99779a",8469:"c3a04ceb",8508:"4ab0e188",8566:"95961fbd",8798:"4085c560",8925:"ba2b348f",9204:"38de275b",9514:"1be78505",9747:"ea4ac3f6",9817:"14eb3368"}[e]||e)+"."+{53:"7f51f478",83:"28ed8fb1",129:"3e37d4f9",216:"fef6aacb",234:"2088b689",577:"f50cf1d8",636:"eeb943fd",641:"b605e7a9",814:"dc8c3a26",918:"74d4892a",947:"307826ea",1020:"a4dcab2f",1185:"66fd7578",1539:"683dd69d",1640:"3b9bfe10",1784:"cb2caecb",1870:"bd2bbd74",2169:"66249d0c",2189:"7426d272",2590:"fd66b1de",3085:"3a447380",3203:"d4e13d9e",3229:"c4a0c786",3232:"be4aa104",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3576:"f1078b74",3585:"66c79227",3697:"1b9b6f47",4177:"25464cae",4250:"6050b9d5",4258:"e9f82eae",4295:"3ac4e2fa",4409:"36893300",4499:"7ab9dfeb",4856:"75e923ba",4868:"8dc4a2e9",4942:"8b5cd46a",4972:"4a54fd4a",5083:"239987e7",5145:"1130c785",5341:"23fc26cd",5624:"36472c3f",5698:"f0df5939",5809:"382eaa95",5834:"d7d124e5",6043:"8dabda10",6105:"421ba05f",6396:"a14e5c35",6752:"10db0348",6966:"573ed0e8",7123:"87bb24e0",7178:"6e73e142",7214:"b8b85909",7370:"68e43d73",7414:"e250e0cb",7761:"1fd0753a",7793:"6cf54420",7918:"e3da5265",7971:"0fa14a25",8024:"79b8547b",8038:"98fdb8a9",8131:"110c8fbf",8243:"6c725d90",8437:"20075f22",8469:"69b9cc30",8508:"4881f4f1",8566:"d7479bd1",8798:"0b0898d2",8925:"fa85ced9",9204:"31eac9cb",9514:"478c02c6",9747:"258a1d84",9817:"b7ea7ab7"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},d="portal:",r.l=(e,a,f,b)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/ar/",r.gca=function(e){return e={17896441:"7918","935f2afb":"53",b6f38314:"83","3eeefb85":"129",f4f68926:"216",fe7eaba3:"234","78378cd2":"577","1bdef35d":"636","7d22b903":"641","363609e7":"918",fd0fca33:"947","245628ab":"1020","97a4dd3a":"1185","78296b4c":"1539",d93bdb62:"1640","399aecfb":"1784","486aefad":"1870","0fbc7aca":"2169","021fdf0c":"2189","3adedf19":"2590","1f391b9e":"3085","2b19e1f6":"3229","6928f4d3":"3232",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","71afd08c":"3576","83dc8527":"3585","2585a6eb":"3697","7bb6992d":"4177","472175da":"4250",bc1252d5:"4258",d0dc5c00:"4295","0cf1c049":"4409","872a0e8c":"4499","6843330a":"4856","3a8f952f":"4868","44f776e2":"4942",dc61d921:"5083","7d8566c6":"5145",e2312bd7:"5341","2f7aafd6":"5624","44a811a8":"5698","28ea47eb":"5809","70bc845e":"5834","0ed41b0c":"6043","3a0aff13":"6105",d8004759:"6396","71dde77b":"6752",a91dd230:"6966",e3a371a5:"7123","37cee8af":"7178",cd1cc54a:"7214",c09f4ff7:"7370","393be207":"7414","85638e0b":"7761",ee9cb384:"7793",b33984a9:"7971","01b6f00b":"8024","497d7304":"8038",bcb2e6e6:"8131","1eca5a47":"8243","5d99779a":"8437",c3a04ceb:"8469","4ab0e188":"8508","95961fbd":"8566","4085c560":"8798",ba2b348f:"8925","38de275b":"9204","1be78505":"9514",ea4ac3f6:"9747","14eb3368":"9817"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)f.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var d=new Promise(((f,d)=>c=e[a]=[f,d]));f.push(c[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var d=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var c,d,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(f);n - + - + \ No newline at end of file diff --git a/ar/docs/category/developer-documentation/index.html b/ar/docs/category/developer-documentation/index.html index 3114df4369e..81fb0618f3b 100644 --- a/ar/docs/category/developer-documentation/index.html +++ b/ar/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
- + \ No newline at end of file diff --git a/ar/docs/category/get-started-with-farming/index.html b/ar/docs/category/get-started-with-farming/index.html index 4c23ef1cfa1..cf3ae19fb8e 100644 --- a/ar/docs/category/get-started-with-farming/index.html +++ b/ar/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ar/docs/category/operators-and-staking/index.html b/ar/docs/category/operators-and-staking/index.html index d9014f9078d..856cbc2310d 100644 --- a/ar/docs/category/operators-and-staking/index.html +++ b/ar/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ar/docs/category/wallets/index.html b/ar/docs/category/wallets/index.html index f476018b703..006d9ffe14a 100644 --- a/ar/docs/category/wallets/index.html +++ b/ar/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ar/docs/community/CODE_OF_CONDUCT/index.html b/ar/docs/community/CODE_OF_CONDUCT/index.html index 3cf8a274743..743401b9cd7 100644 --- a/ar/docs/community/CODE_OF_CONDUCT/index.html +++ b/ar/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
Version: latest

Contributor Covenant Code of Conduct

Our Pledge

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

Our Standards

Examples of behavior that contributes to a positive environment for our community include:

  • Demonstrating empathy and kindness toward other people
  • Being respectful of differing opinions, viewpoints, and experiences
  • Giving and gracefully accepting constructive feedback
  • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
  • Focusing on what is best not just for us as individuals, but for the overall community

Examples of unacceptable behavior include:

  • The use of sexualized language or imagery, and sexual attention or advances of any kind
  • Trolling, insulting or derogatory comments, and personal or political attacks
  • Public or private harassment
  • Publishing others' private information, such as a physical or email address, without their explicit permission
  • Other conduct which could reasonably be considered inappropriate in a professional setting

Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

Scope

This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the reporter of any incident.

Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

1. Correction

Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

2. Warning

Community Impact: A violation through a single incident or series of actions.

Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

3. Temporary Ban

Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

4. Permanent Ban

Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

Consequence: A permanent ban from any sort of public interaction within the community.

Attribution

This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

- + \ No newline at end of file diff --git a/ar/docs/community/contribute/index.html b/ar/docs/community/contribute/index.html index 3b06343af0a..58b0caea050 100644 --- a/ar/docs/community/contribute/index.html +++ b/ar/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
Version: latest

How to Contribute!

You Rock!

First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

Help us, Help you, Help us!

Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

What Can I Contribute?

We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

  • Added Content: Writing a nice guide? Submit it on the forum guides.
  • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
  • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

Ground Rules

Please refer to our Code of Conduct.

Your First Contribution

Simple Fix

Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

  1. Go to Subspace Documentation, and find the page that you would like to change.
  2. Scroll to the bottom and click Edit this page.
  3. This will open up GitHub, and direct you to the raw page on GitHub.
  4. In the top right click the pencil emoji to edit the page.
  5. GitHub will change the page to a text editor, where you will be able to make changes.
  6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
    • Fill out Title
    • Fill out Description
    • Click the Create a new branch for this commit and start a pull request. option
  7. Click Propose Changes
  8. On the right you will see some options, you will want to apply the most accurate labels listed.
  9. Click Create Pull Request

🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

Never contributed before?

No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

Advanced Fix

This section presumes a better understanding of GitHub, and programming basics.

For larger, more advanced fixes please ensure you follow the basic principles below.

  • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
  • Do comment on complex non-trivial code, complex logic should be easy to understand.
  • All public functions need to be commented.
  • If code is trivial but could be forgotten over time, please comment.
  • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
  • Sometimes difficult to understand code needs refactoring instead of more comments.
  • Make sure the program can still build prior to pull request.

For advanced fixes you should follow the general pathway for GitHub.

  1. Create your own fork of the code. Fork
  2. Do the changes locally on your system in your preferred development environment.
  3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
  4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

How to report a bug or error

We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

  • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
  • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

How to suggest a feature or enhancement

This documentation is for the community, so any feature requests are welcome.

  • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
  • Explain why this issue is needed, and what problems it will solve.
  • Indicate if you are able/willing to help implement this feature.

Code review process

  • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
  • If it is a simple and non-controversial fix we will review the code and approve.
  • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
  • If there is no response or activity within 2 weeks of team response we may close the pull request.

Community

You can chat with the core team on Discord https://discord.gg/subspace-network.

- + \ No newline at end of file diff --git a/ar/docs/community/index.html b/ar/docs/community/index.html index 795254fc1e7..5349ed93ab2 100644 --- a/ar/docs/community/index.html +++ b/ar/docs/community/index.html @@ -7,13 +7,13 @@ - +
Version: latest

Awesome Subspace

caution

Please note, all community provided resources are non-official. For clarification please refer to official materials.

Community Groups


Telegram

🇹🇷 - türk telegram topluluğu

Reddit

🇺🇸 - English Subreddit Community

Discord

🇨🇳 - 中国不和谐社区

🇰🇷 - 한국 커뮤니티

🇷🇺 - русское дискорд-сообщество

🇺🇦 - українська діскорд-спільнота

Community Translations


Whitepaper

Articles

Information

F.A.Q

Getting Started Farming

Medium

Getting started guide

Bringing the PoC Consensus to Substrate

Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

Events

1st AMA

Memes & Humor


- + \ No newline at end of file diff --git a/ar/docs/community/translate/index.html b/ar/docs/community/translate/index.html index 6eb267a45e7..590e8e9a43a 100644 --- a/ar/docs/community/translate/index.html +++ b/ar/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
Version: latest

Translation Guide

Translation Guide

Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

Mission and Vision

The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

Our mission

  1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
  2. Expand the global Subspace community by onboarding members across language barriers.
  3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
  4. Encourage community members to contribute translations, impacting the ecosystem significantly.
  5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

Our vision

  1. Translate essential content for Subspace community members worldwide.
  2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
  3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

Translation Leaderboard

Translation How-To Guide

This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

Prerequisites

Guidelines

  • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
  • Ensure you follow our Contributing Standards, and our Code of Conduct.

How-To

Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

  1. Visit the respective translation portal for which website you would like to help translate (See above)

    translate-step-1

  2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

    translate-step-2

  3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

    translate-step-3

  4. You will then be brought into the Translation Portal, In this portal you will find the following

    1. English Version of the Text
    2. Spot to input language translation of english text
    3. Automated Suggestions for text
    4. Word List that needs translating
    5. A spot for comments if something needs clarification

    translate-step-4

  5. From here you will fill in your translations as you would like and finalize once you are done.

  6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

- + \ No newline at end of file diff --git a/ar/docs/developers/block_explorer/index.html b/ar/docs/developers/block_explorer/index.html index 2690e3e4129..5d5a2084a51 100644 --- a/ar/docs/developers/block_explorer/index.html +++ b/ar/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ar/docs/developers/faucet/index.html b/ar/docs/developers/faucet/index.html index d50abeb61e9..6fcde36243d 100644 --- a/ar/docs/developers/faucet/index.html +++ b/ar/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
Version: latest

Subspace faucet

How to get some test tokens

The Faucet is available on our Discord server.

In order to get access to the role-gated developer chat and faucet channel:

  1. Join our Discord

  2. Click on Subspace Network at the top left corner and choose Linked Roles.

    Discord-1

  3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

  4. As soon as you get a Developer role, the Faucet channel will become available to you.

  5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

  6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

  7. You can request tokens once every 24 hours.

- + \ No newline at end of file diff --git a/ar/docs/developers/foundry_guide/index.html b/ar/docs/developers/foundry_guide/index.html index 74eb09fc31d..e1ecccdf705 100644 --- a/ar/docs/developers/foundry_guide/index.html +++ b/ar/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
Version: latest

Foundry - testing and deployment

Testing and deploying smart contracts using Foundry


  1. Use foundryup toolchain installer

    curl -L https://foundry.paradigm.xyz | bash

    This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

    :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

  2. Once installed, create a project. Let’s name it hello_subspace.

    To initialize the project, run

    forge init hello_subspace

    cd into hello_subspace directory and let’s have a look at the project’s structure.

    Foundry-1

  3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.13;

    contract Counter {
    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }
  4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.13;

    import "forge-std/Test.sol";
    import "../src/Counter.sol";

    contract CounterTest is Test {
    Counter public counter;

    function setUp() public {
    counter = new Counter();
    counter.setNumber(2);
    }

    function testIncrement() public {
    counter.increment();
    assertEq(counter.number(), 3);
    }

    function testSetNumber(uint256 x) public {
    counter.setNumber(x);
    assertEq(counter.number(), x);
    }

    function testDecrement() public {
    counter.decrement();
    assertEq(counter.number(), 1);
    }
    }
  1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

    forge build

    and ensure that tests are working as expected by running

    forge test

    Foundry-2

    Nice, all tests are passing, meaning the smart contract is working as expected.

  2. Next, there are two things we need to set, in order to deploy our smart contract:

    - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
    - We need to set an environment variable we will use later.

    In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

    Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

    ```bash
    RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
    ```

    And then set a private key for the EVM-compatible wallet

    ```bash
    PRIVATE_KEY=”your_private_key_value”
    ```

    :::tip

    It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

    In the Makefile, let’s create shortcuts to the main features of the application

    ```bash
    # include .env file and export its env vars
    -include .env

    # Builds
    build:
    @forge clean && forge build --optimize --optimizer-runs 1000000

    # Deployment
    deploy:
    @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
    ```

    We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

    This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

    Let’s run

    ```
    make build
    ```

    to make sure it’s working properly.

    ![Foundry-3](/img/developers/Foundry-3.png)
  3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

    make deploy
  4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

- + \ No newline at end of file diff --git a/ar/docs/developers/general-information/index.html b/ar/docs/developers/general-information/index.html index 3c80607e9f1..9d0141a13fe 100644 --- a/ar/docs/developers/general-information/index.html +++ b/ar/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
Version: latest

General information on dev tools and Subspace EVM

What tools are available for developers?


Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

Smart Contract


A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

Differences with Ethereum


Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

What is Solidity?


Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

Solidity has a great community of developers and extensive documentation is available on the official website.

- + \ No newline at end of file diff --git a/ar/docs/developers/hardhat_guide/index.html b/ar/docs/developers/hardhat_guide/index.html index a9790ff9d51..3c139840942 100644 --- a/ar/docs/developers/hardhat_guide/index.html +++ b/ar/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
Version: latest

Hardhat

Hardhat testing and deployment


Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

Prerequisites Make sure you have NodeJS version >=16.0 installed.

  1. Open a new terminal and run these commands to create a new folder for the project.
mkdir subspace-hardhat
cd subspace-hardhat
  1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
npm install --save-dev hardhat
npm install --save-dev @openzeppelin/contracts
npx hardhat

Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

Hardhat-1

  1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

Hardhat-3

  1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;

import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

contract Counter is ERC20 {
constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

uint256 public number;

function setNumber(uint256 newNumber) public {
number = newNumber;
}

function increment() public {
number++;
}

function decrement() public {
number--;
}
}

Let's also rename the filename to Counter.sol for consistency.

  1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
const { expect } = require("chai");

describe("Counter", function() {
let Counter;
let counter;
let owner;
let addr1;

beforeEach(async function() {
Counter = await ethers.getContractFactory("Counter");
[owner, addr1] = await ethers.getSigners();

counter = await Counter.deploy();
});

describe("Counter operations", function() {
it("Should return initial value of zero", async function() {
expect(await counter.number()).to.equal(0);
});

it("Should set number to a new value", async function() {
await counter.setNumber(5);
expect(await counter.number()).to.equal(5);
});

it("Should increment the number", async function() {
await counter.setNumber(5);
await counter.increment();
expect(await counter.number()).to.equal(6);
});

it("Should decrement the number", async function() {
await counter.setNumber(5);
await counter.decrement();
expect(await counter.number()).to.equal(4);
});
});
});

For consistency, let's also rename Lock.js to CounterTest.js

  1. To run the test, simply type npx hardhat test

    Hardhat-4

Great, looks like everything is working as expected. We’re all set for the deployment!

  1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
require("@nomicfoundation/hardhat-toolbox");
module.exports = {
solidity: "0.8.19",
networks: {
subspace: {
url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
accounts: ["private_key_to_your_account"]
}
}
};
tip

Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

  1. Open to deploy.js file and replace the content with the code.

Hardhat-5

const hre = require("hardhat");

async function main() {
const Contract = await hre.ethers.getContractFactory("Counter");
const contract = await Contract.deploy();

console.log("Contract deployed to:", contract.target);
}

main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
  1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

In case of success deployment, you should see Contract deployed to: transaction hash.

Hardhat-6

  1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
- + \ No newline at end of file diff --git a/ar/docs/developers/intro/index.html b/ar/docs/developers/intro/index.html index 9923e134307..7b64b23ff1c 100644 --- a/ar/docs/developers/intro/index.html +++ b/ar/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
Version: latest

Developer Guide


Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

What makes the Subspace Network protocol different?


Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

Intro-1

What is a Proof-of-Archival-Storage?


At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

  • A Nakamoto (or longest-chain) consensus protocol
  • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
  • The space reflects some useful storage (as in Proof-of-Replication)
  • And the specific data being replicated is the archival history of the Subspace chain

In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

  • Archiving phase: given new blocks of the chain, construct canonical history.
  • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
  • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

A few words about Subspace's consensus protocol Dilithium


As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

Is it difficult to build applications on Subspace Network?


Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

- + \ No newline at end of file diff --git a/ar/docs/developers/local_development/index.html b/ar/docs/developers/local_development/index.html index e17d67f6f1f..b0209d79a05 100644 --- a/ar/docs/developers/local_development/index.html +++ b/ar/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
Version: latest

Local development

Setting up a local development environment

You can always set up a local network to test and deploy your smart contract!

To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

tip

For each release, there are two versions:

  1. skylake: for newer processors from around 2015 and onwards
  2. x86-64-v2: for older processors from around 2009 and some older VMs

Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

  • Your local RPC server port
  • Your local web-socket RPC port You can do this with the following command:
./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

This will create a local RPC on port 8545.

Secondly, you need to start a farmer by running the following command:

 ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

You can specify the desired plot size, but 100M should be sufficient.

And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

- + \ No newline at end of file diff --git a/ar/docs/developers/quick_start/index.html b/ar/docs/developers/quick_start/index.html index ad6d878913f..05723601859 100644 --- a/ar/docs/developers/quick_start/index.html +++ b/ar/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
Version: latest

Quick start

The only tools needed to get you started


The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


Network Name: Subspace EVM
New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
Chain ID: 1002
Currency Symbol: TSSC

Get tokens to your wallet using our faucet


Follow the instructions here to use our Faucet to get some TSSC.

Test and deploy your smart contract


You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

If anything above sounds unfamiliar, you can always fall back to our full guide.

Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


In order to get access to the role-gated developer chat:

  1. Join our Discord

  2. Click on Subspace Network at the top left corner and choose Linked Roles.

    Discord-1

  3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

- + \ No newline at end of file diff --git a/ar/docs/developers/remix_guide/index.html b/ar/docs/developers/remix_guide/index.html index 35f6880cde2..25be72251e7 100644 --- a/ar/docs/developers/remix_guide/index.html +++ b/ar/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
Version: latest

Remix IDE - testing and deployment

Remix IDE guide


Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

Remix has amazing documentation, but this guide will cover everything required to get you started.

  1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

    Remix-1

  2. You can enter any name and use the ERC20 template.

    Remix-2

  3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

    Remix-3

  4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

     // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Remix-4

  5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

    Remix-5

  6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
    Let’s first try to run a test as is without making any changes.

    Remix-6

  7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

    Remix-7

  8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

     pragma solidity >=0.7.0 <0.9.0;
    import "remix_tests.sol";
    import "../contracts/MyToken.sol";

    contract CounterTest is Counter {

    function testTokenInitialValues() public {
    Assert.equal(name(), "SubspaceTestToken", "token name did not match");
    Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
    Assert.equal(decimals(), 18, "token decimals did not match");
    Assert.equal(totalSupply(), 0, "token supply should be zero");
    }

    Counter public counter;

    function setUp() public {
    counter = new Counter();
    counter.setNumber(2);
    }

    function testIncrement() public {
    counter.increment();
    Assert.equal(counter.number(), 3, "test increment did not match");
    }

    function testDecrement() public {
    counter.decrement();
    Assert.equal(counter.number(), 2, "test decrement did not match");
    }
    }

    Remix-8

  9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

    Remix-9

  10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

    Remix-10

  11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

    Remix-11

  12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

    Remix-12

Congratulations, you've just deployed your smart contract on Subspace Core EVM!

- + \ No newline at end of file diff --git a/ar/docs/developers/setting-up-metamask/index.html b/ar/docs/developers/setting-up-metamask/index.html index f75ba695e5e..462309f258f 100644 --- a/ar/docs/developers/setting-up-metamask/index.html +++ b/ar/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/ar/docs/intro/index.html b/ar/docs/intro/index.html index 39f13b1d14a..fc03eab92c5 100644 --- a/ar/docs/intro/index.html +++ b/ar/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/ar/docs/operators_and_staking/intro/index.html b/ar/docs/operators_and_staking/intro/index.html index cad8f34de5a..9ee27804596 100644 --- a/ar/docs/operators_and_staking/intro/index.html +++ b/ar/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/ar/docs/operators_and_staking/operators/index.html b/ar/docs/operators_and_staking/operators/index.html index 8720842affd..0dcba20f760 100644 --- a/ar/docs/operators_and_staking/operators/index.html +++ b/ar/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/ar/docs/operators_and_staking/staking/index.html b/ar/docs/operators_and_staking/staking/index.html index 536dc873a24..ee71e5475b3 100644 --- a/ar/docs/operators_and_staking/staking/index.html +++ b/ar/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/ar/docs/pre-release/category/community/index.html b/ar/docs/pre-release/category/community/index.html index bbbcc7a11c4..419a1635e03 100644 --- a/ar/docs/pre-release/category/community/index.html +++ b/ar/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ar/docs/pre-release/category/developer-documentation/index.html b/ar/docs/pre-release/category/developer-documentation/index.html index 5a2d465e8b5..02176e2aee2 100644 --- a/ar/docs/pre-release/category/developer-documentation/index.html +++ b/ar/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ar/docs/pre-release/category/get-started-with-farming/index.html b/ar/docs/pre-release/category/get-started-with-farming/index.html index bc4f948fdb5..e0467f63eaa 100644 --- a/ar/docs/pre-release/category/get-started-with-farming/index.html +++ b/ar/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ar/docs/pre-release/category/operators-and-staking/index.html b/ar/docs/pre-release/category/operators-and-staking/index.html index 2606b25c124..aad651cdf85 100644 --- a/ar/docs/pre-release/category/operators-and-staking/index.html +++ b/ar/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ar/docs/pre-release/category/wallets/index.html b/ar/docs/pre-release/category/wallets/index.html index 86a7417db2b..10ef78e7633 100644 --- a/ar/docs/pre-release/category/wallets/index.html +++ b/ar/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ar/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/ar/docs/pre-release/community/CODE_OF_CONDUCT/index.html index 37b38e4a763..411d2d32618 100644 --- a/ar/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/ar/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/community/contribute/index.html b/ar/docs/pre-release/community/contribute/index.html index 3c8538653fb..87eb9ecd789 100644 --- a/ar/docs/pre-release/community/contribute/index.html +++ b/ar/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/community/index.html b/ar/docs/pre-release/community/index.html index e0dfb0a9bbf..dbcda938556 100644 --- a/ar/docs/pre-release/community/index.html +++ b/ar/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/ar/docs/pre-release/community/translate/index.html b/ar/docs/pre-release/community/translate/index.html index 17b54e14bc8..cfa3ba79afa 100644 --- a/ar/docs/pre-release/community/translate/index.html +++ b/ar/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/developers/block_explorer/index.html b/ar/docs/pre-release/developers/block_explorer/index.html index 94f553b51f5..c1b063b9f44 100644 --- a/ar/docs/pre-release/developers/block_explorer/index.html +++ b/ar/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/developers/faucet/index.html b/ar/docs/pre-release/developers/faucet/index.html index 73b9bf40d0f..5d9934715d2 100644 --- a/ar/docs/pre-release/developers/faucet/index.html +++ b/ar/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/developers/foundry_guide/index.html b/ar/docs/pre-release/developers/foundry_guide/index.html index a7498ce6e36..cb63aa9b006 100644 --- a/ar/docs/pre-release/developers/foundry_guide/index.html +++ b/ar/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/developers/general-information/index.html b/ar/docs/pre-release/developers/general-information/index.html index 33141b03767..397a51ca857 100644 --- a/ar/docs/pre-release/developers/general-information/index.html +++ b/ar/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/developers/hardhat_guide/index.html b/ar/docs/pre-release/developers/hardhat_guide/index.html index 6e14303a6ef..924681f6c50 100644 --- a/ar/docs/pre-release/developers/hardhat_guide/index.html +++ b/ar/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/ar/docs/pre-release/developers/intro/index.html b/ar/docs/pre-release/developers/intro/index.html index 11b8ec2386b..06e96fc79a5 100644 --- a/ar/docs/pre-release/developers/intro/index.html +++ b/ar/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/developers/local_development/index.html b/ar/docs/pre-release/developers/local_development/index.html index dcdff3e10ad..b9f00725731 100644 --- a/ar/docs/pre-release/developers/local_development/index.html +++ b/ar/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/developers/quick_start/index.html b/ar/docs/pre-release/developers/quick_start/index.html index 3bd353c6f8d..977ccf7c1a3 100644 --- a/ar/docs/pre-release/developers/quick_start/index.html +++ b/ar/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/developers/remix_guide/index.html b/ar/docs/pre-release/developers/remix_guide/index.html index b11f435ca60..525182e13de 100644 --- a/ar/docs/pre-release/developers/remix_guide/index.html +++ b/ar/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/developers/setting-up-metamask/index.html b/ar/docs/pre-release/developers/setting-up-metamask/index.html index a6c10292575..d79ecff81c3 100644 --- a/ar/docs/pre-release/developers/setting-up-metamask/index.html +++ b/ar/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/intro/index.html b/ar/docs/pre-release/intro/index.html index 2c90ac3ba47..6bfca2dd92e 100644 --- a/ar/docs/pre-release/intro/index.html +++ b/ar/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/operators_and_staking/intro/index.html b/ar/docs/pre-release/operators_and_staking/intro/index.html index 93448e503c6..adebb48a4e3 100644 --- a/ar/docs/pre-release/operators_and_staking/intro/index.html +++ b/ar/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/operators_and_staking/operators/index.html b/ar/docs/pre-release/operators_and_staking/operators/index.html index a9f3746584f..53ef89c06b2 100644 --- a/ar/docs/pre-release/operators_and_staking/operators/index.html +++ b/ar/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/operators_and_staking/staking/index.html b/ar/docs/pre-release/operators_and_staking/staking/index.html index f57f59ad7ec..f0460c871c1 100644 --- a/ar/docs/pre-release/operators_and_staking/staking/index.html +++ b/ar/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/ar/docs/pre-release/protocol/common_problems/index.html b/ar/docs/pre-release/protocol/common_problems/index.html index 65c170a2fbc..527ea5a26d0 100644 --- a/ar/docs/pre-release/protocol/common_problems/index.html +++ b/ar/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/protocol/port-forwarding/index.html b/ar/docs/pre-release/protocol/port-forwarding/index.html index 26eba1c4314..a7fc88c8f3a 100644 --- a/ar/docs/pre-release/protocol/port-forwarding/index.html +++ b/ar/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/ar/docs/pre-release/protocol/pulsar/index.html b/ar/docs/pre-release/protocol/pulsar/index.html index 086921721bf..548d78d8cee 100644 --- a/ar/docs/pre-release/protocol/pulsar/index.html +++ b/ar/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/protocol/security/index.html b/ar/docs/pre-release/protocol/security/index.html index c33fe71f9fe..e90f372719e 100644 --- a/ar/docs/pre-release/protocol/security/index.html +++ b/ar/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/protocol/substrate-cli/index.html b/ar/docs/pre-release/protocol/substrate-cli/index.html index 06825bfa98f..771eeee9ee1 100644 --- a/ar/docs/pre-release/protocol/substrate-cli/index.html +++ b/ar/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/protocol/timekeeping/index.html b/ar/docs/pre-release/protocol/timekeeping/index.html index e038659f0f4..d3daa70f092 100644 --- a/ar/docs/pre-release/protocol/timekeeping/index.html +++ b/ar/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/ar/docs/pre-release/protocol/wallets/polkadot/index.html b/ar/docs/pre-release/protocol/wallets/polkadot/index.html index cff320d3dc9..248d40ed4ce 100644 --- a/ar/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/ar/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/ar/docs/pre-release/protocol/wallets/subwallet/index.html b/ar/docs/pre-release/protocol/wallets/subwallet/index.html index 2506bcb8741..33516b4d8c0 100644 --- a/ar/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/ar/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/ar/docs/protocol/common_problems/index.html b/ar/docs/protocol/common_problems/index.html index 69d060e4edb..b8d224e8fe0 100644 --- a/ar/docs/protocol/common_problems/index.html +++ b/ar/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/ar/docs/protocol/port-forwarding/index.html b/ar/docs/protocol/port-forwarding/index.html index c87156d34b6..4d5292fe264 100644 --- a/ar/docs/protocol/port-forwarding/index.html +++ b/ar/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/ar/docs/protocol/pulsar/index.html b/ar/docs/protocol/pulsar/index.html index 59af95be469..d5120a86429 100644 --- a/ar/docs/protocol/pulsar/index.html +++ b/ar/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ar/docs/protocol/security/index.html b/ar/docs/protocol/security/index.html index 4ce218ec2c6..49091cb4066 100644 --- a/ar/docs/protocol/security/index.html +++ b/ar/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/ar/docs/protocol/substrate-cli/index.html b/ar/docs/protocol/substrate-cli/index.html index d8ddb7becc6..19a591bb6a3 100644 --- a/ar/docs/protocol/substrate-cli/index.html +++ b/ar/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ar/docs/protocol/timekeeping/index.html b/ar/docs/protocol/timekeeping/index.html index af1ad8a66a3..96ea0c957ee 100644 --- a/ar/docs/protocol/timekeeping/index.html +++ b/ar/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/ar/docs/protocol/wallets/polkadot/index.html b/ar/docs/protocol/wallets/polkadot/index.html index a86958d415f..de5e1caac26 100644 --- a/ar/docs/protocol/wallets/polkadot/index.html +++ b/ar/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/ar/docs/protocol/wallets/subwallet/index.html b/ar/docs/protocol/wallets/subwallet/index.html index 9e67f1722fc..bc24aeb574c 100644 --- a/ar/docs/protocol/wallets/subwallet/index.html +++ b/ar/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/ar/index.html b/ar/index.html index 4ca721da3e0..d2050a91c20 100644 --- a/ar/index.html +++ b/ar/index.html @@ -7,13 +7,13 @@ - +

    مزرعة من أي مكان

    كسب المكافآت عن طريق تشغيل عقدة المزارع بواسطة تعهد القرص الفارغ. لا يلزم إعداد باهظ الثمن أو رأس مال مقدم.

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/ar/markdown-page/index.html b/ar/markdown-page/index.html index e328abf1258..a55746170c1 100644 --- a/ar/markdown-page/index.html +++ b/ar/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/assets/js/f169cc65.b2ee663f.js b/assets/js/f169cc65.ab4ddb2e.js similarity index 73% rename from assets/js/f169cc65.b2ee663f.js rename to assets/js/f169cc65.ab4ddb2e.js index e1ffa72d3fb..c94cca1278f 100644 --- a/assets/js/f169cc65.b2ee663f.js +++ b/assets/js/f169cc65.ab4ddb2e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[1775],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/en/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/en/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[1775],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/en/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/en/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.21487103.js b/assets/js/runtime~main.032f02d9.js similarity index 99% rename from assets/js/runtime~main.21487103.js rename to assets/js/runtime~main.032f02d9.js index c294f6b8c46..67ebff0c5f8 100644 --- a/assets/js/runtime~main.21487103.js +++ b/assets/js/runtime~main.032f02d9.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",368:"5ab089b0",1078:"16ed4e3a",1275:"680e8288",1412:"ef079a11",1461:"e555eeaa",1561:"489b696b",1608:"f30f701e",1667:"27117f5c",1670:"1b29f2dd",1775:"f169cc65",2108:"51204d99",2398:"6f5c7b63",2475:"f99902da",3085:"1f391b9e",3121:"0b73ee5b",3199:"e807d17e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3346:"1671387f",3549:"1a4f8f69",3550:"56ea20cd",3923:"b5f811c8",4226:"d1d936bc",4253:"4e96d4e2",4320:"ab05ce1a",4383:"d9e5b2ec",4429:"07614351",4461:"d6e90b28",4520:"b8dffc63",4755:"6a73d943",4767:"718a0785",4941:"38e7717c",5346:"544874ba",5352:"2bf95319",5557:"66b74cb0",5812:"03df22dd",5835:"5c30f65f",5895:"fa20a39f",6021:"aaa447a1",6146:"7cfaedcc",6172:"87fd2fb8",6334:"16fd3831",6499:"8ae34c0f",6509:"f6084e24",6747:"2e71e7a9",7034:"d07224d3",7053:"9768906c",7064:"62c93cd8",7370:"c09f4ff7",7414:"393be207",7459:"6c877f9d",7539:"f92c1317",7866:"f7525c6d",7918:"17896441",8295:"99211ef8",8393:"47717a13",8479:"e324f23e",8610:"80224b64",8843:"d223ae81",8986:"daeecbe3",8995:"525e5927",9029:"2fe11370",9181:"3504c249",9225:"5b44acae",9278:"958662b6",9401:"62d1a5f8",9514:"1be78505",9817:"14eb3368",9877:"f4c49cb5",9892:"cb93a115"}[e]||e)+"."+{53:"7556fae3",368:"f3a7ec1d",814:"dc8c3a26",1078:"53dd7605",1275:"e4b5218a",1412:"eed5164a",1461:"4cd51526",1561:"02c8c089",1608:"c0c1fa50",1667:"516f57a5",1670:"eaa37bd9",1775:"b2ee663f",2108:"64b37efd",2398:"7ffc27be",2475:"dcb0f513",3085:"3a447380",3121:"1fab945a",3199:"8f5c4a35",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3346:"a15267a4",3473:"fdffa07c",3549:"284100ba",3550:"f136dc52",3923:"9e8c10ad",4226:"091bd3c0",4253:"9325413d",4320:"5ad8ae96",4383:"59d45dfb",4429:"3728250a",4461:"df81a0a6",4520:"53b7f588",4755:"58c0405e",4767:"fd921888",4941:"7b914e05",4972:"4a54fd4a",5346:"a7035d54",5352:"f023a6ef",5557:"e91f7ca8",5812:"1d941745",5835:"bd897a5e",5895:"4fb6b089",6021:"38a4675b",6146:"d2c272ed",6172:"3a2bf6f1",6334:"076054c5",6499:"dc289b38",6509:"ae9c89cc",6747:"f0c27f98",7034:"aed11d31",7053:"0547400e",7064:"e162f093",7370:"12424acb",7414:"f3c97f9b",7459:"2fa46fe1",7539:"a7450dcc",7866:"2f479928",7918:"e3da5265",8295:"f77af30e",8393:"8bf344d5",8479:"b22145ea",8610:"ec5d1093",8843:"60243ed4",8986:"c3758f36",8995:"cc903e11",9029:"7c6995a9",9181:"2f55021b",9225:"77b081a0",9278:"68625c99",9401:"6155fdd6",9514:"478c02c6",9817:"b7ea7ab7",9877:"b0d3e2d0",9892:"49a1effb"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918","935f2afb":"53","5ab089b0":"368","16ed4e3a":"1078","680e8288":"1275",ef079a11:"1412",e555eeaa:"1461","489b696b":"1561",f30f701e:"1608","27117f5c":"1667","1b29f2dd":"1670",f169cc65:"1775","51204d99":"2108","6f5c7b63":"2398",f99902da:"2475","1f391b9e":"3085","0b73ee5b":"3121",e807d17e:"3199",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","1671387f":"3346","1a4f8f69":"3549","56ea20cd":"3550",b5f811c8:"3923",d1d936bc:"4226","4e96d4e2":"4253",ab05ce1a:"4320",d9e5b2ec:"4383","07614351":"4429",d6e90b28:"4461",b8dffc63:"4520","6a73d943":"4755","718a0785":"4767","38e7717c":"4941","544874ba":"5346","2bf95319":"5352","66b74cb0":"5557","03df22dd":"5812","5c30f65f":"5835",fa20a39f:"5895",aaa447a1:"6021","7cfaedcc":"6146","87fd2fb8":"6172","16fd3831":"6334","8ae34c0f":"6499",f6084e24:"6509","2e71e7a9":"6747",d07224d3:"7034","9768906c":"7053","62c93cd8":"7064",c09f4ff7:"7370","393be207":"7414","6c877f9d":"7459",f92c1317:"7539",f7525c6d:"7866","99211ef8":"8295","47717a13":"8393",e324f23e:"8479","80224b64":"8610",d223ae81:"8843",daeecbe3:"8986","525e5927":"8995","2fe11370":"9029","3504c249":"9181","5b44acae":"9225","958662b6":"9278","62d1a5f8":"9401","1be78505":"9514","14eb3368":"9817",f4c49cb5:"9877",cb93a115:"9892"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",368:"5ab089b0",1078:"16ed4e3a",1275:"680e8288",1412:"ef079a11",1461:"e555eeaa",1561:"489b696b",1608:"f30f701e",1667:"27117f5c",1670:"1b29f2dd",1775:"f169cc65",2108:"51204d99",2398:"6f5c7b63",2475:"f99902da",3085:"1f391b9e",3121:"0b73ee5b",3199:"e807d17e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3346:"1671387f",3549:"1a4f8f69",3550:"56ea20cd",3923:"b5f811c8",4226:"d1d936bc",4253:"4e96d4e2",4320:"ab05ce1a",4383:"d9e5b2ec",4429:"07614351",4461:"d6e90b28",4520:"b8dffc63",4755:"6a73d943",4767:"718a0785",4941:"38e7717c",5346:"544874ba",5352:"2bf95319",5557:"66b74cb0",5812:"03df22dd",5835:"5c30f65f",5895:"fa20a39f",6021:"aaa447a1",6146:"7cfaedcc",6172:"87fd2fb8",6334:"16fd3831",6499:"8ae34c0f",6509:"f6084e24",6747:"2e71e7a9",7034:"d07224d3",7053:"9768906c",7064:"62c93cd8",7370:"c09f4ff7",7414:"393be207",7459:"6c877f9d",7539:"f92c1317",7866:"f7525c6d",7918:"17896441",8295:"99211ef8",8393:"47717a13",8479:"e324f23e",8610:"80224b64",8843:"d223ae81",8986:"daeecbe3",8995:"525e5927",9029:"2fe11370",9181:"3504c249",9225:"5b44acae",9278:"958662b6",9401:"62d1a5f8",9514:"1be78505",9817:"14eb3368",9877:"f4c49cb5",9892:"cb93a115"}[e]||e)+"."+{53:"7556fae3",368:"f3a7ec1d",814:"dc8c3a26",1078:"53dd7605",1275:"e4b5218a",1412:"eed5164a",1461:"4cd51526",1561:"02c8c089",1608:"c0c1fa50",1667:"516f57a5",1670:"eaa37bd9",1775:"ab4ddb2e",2108:"64b37efd",2398:"7ffc27be",2475:"dcb0f513",3085:"3a447380",3121:"1fab945a",3199:"8f5c4a35",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3346:"a15267a4",3473:"fdffa07c",3549:"284100ba",3550:"f136dc52",3923:"9e8c10ad",4226:"091bd3c0",4253:"9325413d",4320:"5ad8ae96",4383:"59d45dfb",4429:"3728250a",4461:"df81a0a6",4520:"53b7f588",4755:"58c0405e",4767:"fd921888",4941:"7b914e05",4972:"4a54fd4a",5346:"a7035d54",5352:"f023a6ef",5557:"e91f7ca8",5812:"1d941745",5835:"bd897a5e",5895:"4fb6b089",6021:"38a4675b",6146:"d2c272ed",6172:"3a2bf6f1",6334:"076054c5",6499:"dc289b38",6509:"ae9c89cc",6747:"f0c27f98",7034:"aed11d31",7053:"0547400e",7064:"e162f093",7370:"12424acb",7414:"f3c97f9b",7459:"2fa46fe1",7539:"a7450dcc",7866:"2f479928",7918:"e3da5265",8295:"f77af30e",8393:"8bf344d5",8479:"b22145ea",8610:"ec5d1093",8843:"60243ed4",8986:"c3758f36",8995:"cc903e11",9029:"7c6995a9",9181:"2f55021b",9225:"77b081a0",9278:"68625c99",9401:"6155fdd6",9514:"478c02c6",9817:"b7ea7ab7",9877:"b0d3e2d0",9892:"49a1effb"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918","935f2afb":"53","5ab089b0":"368","16ed4e3a":"1078","680e8288":"1275",ef079a11:"1412",e555eeaa:"1461","489b696b":"1561",f30f701e:"1608","27117f5c":"1667","1b29f2dd":"1670",f169cc65:"1775","51204d99":"2108","6f5c7b63":"2398",f99902da:"2475","1f391b9e":"3085","0b73ee5b":"3121",e807d17e:"3199",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","1671387f":"3346","1a4f8f69":"3549","56ea20cd":"3550",b5f811c8:"3923",d1d936bc:"4226","4e96d4e2":"4253",ab05ce1a:"4320",d9e5b2ec:"4383","07614351":"4429",d6e90b28:"4461",b8dffc63:"4520","6a73d943":"4755","718a0785":"4767","38e7717c":"4941","544874ba":"5346","2bf95319":"5352","66b74cb0":"5557","03df22dd":"5812","5c30f65f":"5835",fa20a39f:"5895",aaa447a1:"6021","7cfaedcc":"6146","87fd2fb8":"6172","16fd3831":"6334","8ae34c0f":"6499",f6084e24:"6509","2e71e7a9":"6747",d07224d3:"7034","9768906c":"7053","62c93cd8":"7064",c09f4ff7:"7370","393be207":"7414","6c877f9d":"7459",f92c1317:"7539",f7525c6d:"7866","99211ef8":"8295","47717a13":"8393",e324f23e:"8479","80224b64":"8610",d223ae81:"8843",daeecbe3:"8986","525e5927":"8995","2fe11370":"9029","3504c249":"9181","5b44acae":"9225","958662b6":"9278","62d1a5f8":"9401","1be78505":"9514","14eb3368":"9817",f4c49cb5:"9877",cb93a115:"9892"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n - + - + \ No newline at end of file diff --git a/bn/assets/js/fff23c7d.63ad24ea.js b/bn/assets/js/fff23c7d.d3942aa0.js similarity index 73% rename from bn/assets/js/fff23c7d.63ad24ea.js rename to bn/assets/js/fff23c7d.d3942aa0.js index 6e0384610f3..a92fdae18f8 100644 --- a/bn/assets/js/fff23c7d.63ad24ea.js +++ b/bn/assets/js/fff23c7d.d3942aa0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[2081],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,b=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(b,i(i({ref:t},c),{},{components:r})):n.createElement(b,i({ref:t},c))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/bn/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/bn/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/bn/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/bn/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/bn/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[2081],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,b=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(b,i(i({ref:t},c),{},{components:r})):n.createElement(b,i({ref:t},c))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/bn/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/bn/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/bn/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/bn/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/bn/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/bn/assets/js/runtime~main.ee5c3dc0.js b/bn/assets/js/runtime~main.5fafcad6.js similarity index 99% rename from bn/assets/js/runtime~main.ee5c3dc0.js rename to bn/assets/js/runtime~main.5fafcad6.js index 29cd59c77c0..38a8bca7c8f 100644 --- a/bn/assets/js/runtime~main.ee5c3dc0.js +++ b/bn/assets/js/runtime~main.5fafcad6.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,d,a,b,c={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var d=t[e]={exports:{}};return c[e].call(d.exports,d,d.exports,r),d.exports}r.m=c,e=[],r.O=(f,d,a,b)=>{if(!d){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[d,a,b]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};f=f||[null,d({}),d([]),d(d)];for(var t=2&a&&e;"object"==typeof t&&!~f.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((f=>c[f]=()=>e[f]));return c.default=()=>e,r.d(b,c),b},r.d=(e,f)=>{for(var d in f)r.o(f,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:f[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,d)=>(r.f[d](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",390:"2fdcd799",477:"753800f9",757:"8e60fa17",819:"62615364",926:"4f70e21f",1228:"97082693",1307:"d7aa6d3c",1645:"c0eae654",1952:"2b654760",1970:"64560d28",2069:"fd41ee1d",2081:"fff23c7d",2290:"09085d85",2322:"6f792c2e",2482:"af2aafbe",2617:"a0e78cb4",2789:"561fb7e5",3027:"f808ebfb",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3473:"debb046b",3586:"cd2c27cd",4095:"2ea02c7c",4270:"b733fb48",4382:"be5feaf3",4394:"8590b1d6",4434:"856dbc04",4437:"d78d157d",4504:"6d1c20a8",4807:"b4d7a4d1",4810:"abf27268",4911:"69bfd741",5253:"8721dfca",5588:"36dcb933",5591:"f3bcaf4d",5801:"f4139c87",6262:"18910b2e",6338:"45e18df1",6607:"18c9bbbc",6718:"0155414f",6828:"23b17488",6937:"ae2d99f8",7018:"df8f7c71",7119:"8cd4308c",7370:"c09f4ff7",7414:"3179d6d5",7428:"f6754b10",7494:"0e37172d",7524:"7ca37e1e",7576:"8d529e5e",7748:"d50c9204",7918:"17896441",8663:"8c99e130",8880:"393be207",8949:"e8f18b53",9081:"5d2c6772",9144:"b2d410b4",9275:"6b3e8e9c",9299:"15bfe2f2",9447:"d8b60a99",9514:"1be78505",9527:"4860649d",9559:"525d11eb",9628:"bf0c8492",9640:"20e5c1a3",9817:"14eb3368",9841:"b22b4d3a",9899:"abca842c",9963:"dddab59a"}[e]||e)+"."+{53:"37fe42f7",390:"4d8a86a1",477:"eab7eb9a",757:"597d0119",814:"dc8c3a26",819:"873e3fad",926:"ea20f64f",1228:"720960fd",1307:"78012ac6",1645:"177eddc0",1952:"451302db",1970:"23272d51",2069:"0251ce23",2081:"63ad24ea",2290:"8bc3b98e",2322:"6ffea6cb",2482:"65d37bb3",2617:"4413be77",2789:"a5973459",3027:"eb1f0edb",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"ac2bbf62",3586:"8acb402d",4095:"d632ceb8",4270:"fa651db9",4382:"104a7c93",4394:"438c91ee",4434:"28b456f7",4437:"6b2c0145",4504:"69135158",4807:"407a70e8",4810:"ac6324a8",4911:"2fe43f7b",4972:"4a54fd4a",5253:"e09a6762",5588:"71592285",5591:"a641ed41",5801:"b2e2ae5f",6262:"0b198358",6338:"40aefb2d",6607:"74cbde36",6718:"0178b292",6828:"f08509ba",6937:"522191a3",7e3:"bbd297bd",7018:"a1e73b08",7119:"c469037b",7370:"30a6da1a",7414:"a4bff41c",7428:"2c6f9ffc",7494:"0b5643fa",7524:"d21cb083",7576:"566b5762",7748:"63f76cbe",7918:"e3da5265",8663:"9b331d39",8880:"0763f263",8949:"eb5ff716",9081:"f419db9a",9144:"e4501d37",9275:"df237f7e",9299:"d3d34b79",9447:"dce66ec2",9514:"478c02c6",9527:"08755bf1",9559:"a8d97212",9628:"95b48532",9640:"34cdcfa9",9817:"b7ea7ab7",9841:"3e61b911",9899:"145163e5",9963:"a728b91c"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),a={},b="portal:",r.l=(e,f,d,c)=>{if(a[e])a[e].push(f);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=a[e];if(delete a[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(d))),f)return f(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/bn/",r.gca=function(e){return e={17896441:"7918",62615364:"819",97082693:"1228","935f2afb":"53","2fdcd799":"390","753800f9":"477","8e60fa17":"757","4f70e21f":"926",d7aa6d3c:"1307",c0eae654:"1645","2b654760":"1952","64560d28":"1970",fd41ee1d:"2069",fff23c7d:"2081","09085d85":"2290","6f792c2e":"2322",af2aafbe:"2482",a0e78cb4:"2617","561fb7e5":"2789",f808ebfb:"3027","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280",debb046b:"3473",cd2c27cd:"3586","2ea02c7c":"4095",b733fb48:"4270",be5feaf3:"4382","8590b1d6":"4394","856dbc04":"4434",d78d157d:"4437","6d1c20a8":"4504",b4d7a4d1:"4807",abf27268:"4810","69bfd741":"4911","8721dfca":"5253","36dcb933":"5588",f3bcaf4d:"5591",f4139c87:"5801","18910b2e":"6262","45e18df1":"6338","18c9bbbc":"6607","0155414f":"6718","23b17488":"6828",ae2d99f8:"6937",df8f7c71:"7018","8cd4308c":"7119",c09f4ff7:"7370","3179d6d5":"7414",f6754b10:"7428","0e37172d":"7494","7ca37e1e":"7524","8d529e5e":"7576",d50c9204:"7748","8c99e130":"8663","393be207":"8880",e8f18b53:"8949","5d2c6772":"9081",b2d410b4:"9144","6b3e8e9c":"9275","15bfe2f2":"9299",d8b60a99:"9447","1be78505":"9514","4860649d":"9527","525d11eb":"9559",bf0c8492:"9628","20e5c1a3":"9640","14eb3368":"9817",b22b4d3a:"9841",abca842c:"9899",dddab59a:"9963"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,d)=>{var a=r.o(e,f)?e[f]:void 0;if(0!==a)if(a)d.push(a[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var b=new Promise(((d,b)=>a=e[f]=[d,b]));d.push(a[2]=b);var c=r.p+r.u(f),t=new Error;r.l(c,(d=>{if(r.o(e,f)&&(0!==(a=e[f])&&(e[f]=void 0),a)){var b=d&&("load"===d.type?"missing":d.type),c=d&&d.target&&d.target.src;t.message="Loading chunk "+f+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,a[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,d)=>{var a,b,c=d[0],t=d[1],o=d[2],n=0;if(c.some((f=>0!==e[f]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(f&&f(d);n{"use strict";var e,f,d,a,b,c={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var d=t[e]={exports:{}};return c[e].call(d.exports,d,d.exports,r),d.exports}r.m=c,e=[],r.O=(f,d,a,b)=>{if(!d){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[d,a,b]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};f=f||[null,d({}),d([]),d(d)];for(var t=2&a&&e;"object"==typeof t&&!~f.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((f=>c[f]=()=>e[f]));return c.default=()=>e,r.d(b,c),b},r.d=(e,f)=>{for(var d in f)r.o(f,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:f[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,d)=>(r.f[d](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",390:"2fdcd799",477:"753800f9",757:"8e60fa17",819:"62615364",926:"4f70e21f",1228:"97082693",1307:"d7aa6d3c",1645:"c0eae654",1952:"2b654760",1970:"64560d28",2069:"fd41ee1d",2081:"fff23c7d",2290:"09085d85",2322:"6f792c2e",2482:"af2aafbe",2617:"a0e78cb4",2789:"561fb7e5",3027:"f808ebfb",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3473:"debb046b",3586:"cd2c27cd",4095:"2ea02c7c",4270:"b733fb48",4382:"be5feaf3",4394:"8590b1d6",4434:"856dbc04",4437:"d78d157d",4504:"6d1c20a8",4807:"b4d7a4d1",4810:"abf27268",4911:"69bfd741",5253:"8721dfca",5588:"36dcb933",5591:"f3bcaf4d",5801:"f4139c87",6262:"18910b2e",6338:"45e18df1",6607:"18c9bbbc",6718:"0155414f",6828:"23b17488",6937:"ae2d99f8",7018:"df8f7c71",7119:"8cd4308c",7370:"c09f4ff7",7414:"3179d6d5",7428:"f6754b10",7494:"0e37172d",7524:"7ca37e1e",7576:"8d529e5e",7748:"d50c9204",7918:"17896441",8663:"8c99e130",8880:"393be207",8949:"e8f18b53",9081:"5d2c6772",9144:"b2d410b4",9275:"6b3e8e9c",9299:"15bfe2f2",9447:"d8b60a99",9514:"1be78505",9527:"4860649d",9559:"525d11eb",9628:"bf0c8492",9640:"20e5c1a3",9817:"14eb3368",9841:"b22b4d3a",9899:"abca842c",9963:"dddab59a"}[e]||e)+"."+{53:"37fe42f7",390:"4d8a86a1",477:"eab7eb9a",757:"597d0119",814:"dc8c3a26",819:"873e3fad",926:"ea20f64f",1228:"720960fd",1307:"78012ac6",1645:"177eddc0",1952:"451302db",1970:"23272d51",2069:"0251ce23",2081:"d3942aa0",2290:"8bc3b98e",2322:"6ffea6cb",2482:"65d37bb3",2617:"4413be77",2789:"a5973459",3027:"eb1f0edb",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"ac2bbf62",3586:"8acb402d",4095:"d632ceb8",4270:"fa651db9",4382:"104a7c93",4394:"438c91ee",4434:"28b456f7",4437:"6b2c0145",4504:"69135158",4807:"407a70e8",4810:"ac6324a8",4911:"2fe43f7b",4972:"4a54fd4a",5253:"e09a6762",5588:"71592285",5591:"a641ed41",5801:"b2e2ae5f",6262:"0b198358",6338:"40aefb2d",6607:"74cbde36",6718:"0178b292",6828:"f08509ba",6937:"522191a3",7e3:"bbd297bd",7018:"a1e73b08",7119:"c469037b",7370:"30a6da1a",7414:"a4bff41c",7428:"2c6f9ffc",7494:"0b5643fa",7524:"d21cb083",7576:"566b5762",7748:"63f76cbe",7918:"e3da5265",8663:"9b331d39",8880:"0763f263",8949:"eb5ff716",9081:"f419db9a",9144:"e4501d37",9275:"df237f7e",9299:"d3d34b79",9447:"dce66ec2",9514:"478c02c6",9527:"08755bf1",9559:"a8d97212",9628:"95b48532",9640:"34cdcfa9",9817:"b7ea7ab7",9841:"3e61b911",9899:"145163e5",9963:"a728b91c"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),a={},b="portal:",r.l=(e,f,d,c)=>{if(a[e])a[e].push(f);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=a[e];if(delete a[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(d))),f)return f(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/bn/",r.gca=function(e){return e={17896441:"7918",62615364:"819",97082693:"1228","935f2afb":"53","2fdcd799":"390","753800f9":"477","8e60fa17":"757","4f70e21f":"926",d7aa6d3c:"1307",c0eae654:"1645","2b654760":"1952","64560d28":"1970",fd41ee1d:"2069",fff23c7d:"2081","09085d85":"2290","6f792c2e":"2322",af2aafbe:"2482",a0e78cb4:"2617","561fb7e5":"2789",f808ebfb:"3027","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280",debb046b:"3473",cd2c27cd:"3586","2ea02c7c":"4095",b733fb48:"4270",be5feaf3:"4382","8590b1d6":"4394","856dbc04":"4434",d78d157d:"4437","6d1c20a8":"4504",b4d7a4d1:"4807",abf27268:"4810","69bfd741":"4911","8721dfca":"5253","36dcb933":"5588",f3bcaf4d:"5591",f4139c87:"5801","18910b2e":"6262","45e18df1":"6338","18c9bbbc":"6607","0155414f":"6718","23b17488":"6828",ae2d99f8:"6937",df8f7c71:"7018","8cd4308c":"7119",c09f4ff7:"7370","3179d6d5":"7414",f6754b10:"7428","0e37172d":"7494","7ca37e1e":"7524","8d529e5e":"7576",d50c9204:"7748","8c99e130":"8663","393be207":"8880",e8f18b53:"8949","5d2c6772":"9081",b2d410b4:"9144","6b3e8e9c":"9275","15bfe2f2":"9299",d8b60a99:"9447","1be78505":"9514","4860649d":"9527","525d11eb":"9559",bf0c8492:"9628","20e5c1a3":"9640","14eb3368":"9817",b22b4d3a:"9841",abca842c:"9899",dddab59a:"9963"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,d)=>{var a=r.o(e,f)?e[f]:void 0;if(0!==a)if(a)d.push(a[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var b=new Promise(((d,b)=>a=e[f]=[d,b]));d.push(a[2]=b);var c=r.p+r.u(f),t=new Error;r.l(c,(d=>{if(r.o(e,f)&&(0!==(a=e[f])&&(e[f]=void 0),a)){var b=d&&("load"===d.type?"missing":d.type),c=d&&d.target&&d.target.src;t.message="Loading chunk "+f+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,a[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,d)=>{var a,b,c=d[0],t=d[1],o=d[2],n=0;if(c.some((f=>0!==e[f]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(f&&f(d);n - + - + \ No newline at end of file diff --git a/bn/docs/category/developer-documentation/index.html b/bn/docs/category/developer-documentation/index.html index 8af21a30442..556a8bfd72b 100644 --- a/bn/docs/category/developer-documentation/index.html +++ b/bn/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/bn/docs/category/get-started-with-farming/index.html b/bn/docs/category/get-started-with-farming/index.html index 258ded39ec3..554107c221f 100644 --- a/bn/docs/category/get-started-with-farming/index.html +++ b/bn/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/bn/docs/category/operators-and-staking/index.html b/bn/docs/category/operators-and-staking/index.html index 7841ec04c78..48aa5cc6574 100644 --- a/bn/docs/category/operators-and-staking/index.html +++ b/bn/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/bn/docs/category/wallets/index.html b/bn/docs/category/wallets/index.html index 0838293c7ce..75d873227ce 100644 --- a/bn/docs/category/wallets/index.html +++ b/bn/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/bn/docs/community/CODE_OF_CONDUCT/index.html b/bn/docs/community/CODE_OF_CONDUCT/index.html index 2dc012610da..b2e31b70fb8 100644 --- a/bn/docs/community/CODE_OF_CONDUCT/index.html +++ b/bn/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/bn/docs/community/contribute/index.html b/bn/docs/community/contribute/index.html index 1f66e875f84..243e6457919 100644 --- a/bn/docs/community/contribute/index.html +++ b/bn/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/bn/docs/community/index.html b/bn/docs/community/index.html index dfbb5b154e7..a246744d2d1 100644 --- a/bn/docs/community/index.html +++ b/bn/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/bn/docs/community/translate/index.html b/bn/docs/community/translate/index.html index 7cd0a9877d0..93c51cc4f2d 100644 --- a/bn/docs/community/translate/index.html +++ b/bn/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/bn/docs/developers/block_explorer/index.html b/bn/docs/developers/block_explorer/index.html index 581e391e1f6..9b1dd510724 100644 --- a/bn/docs/developers/block_explorer/index.html +++ b/bn/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/bn/docs/developers/faucet/index.html b/bn/docs/developers/faucet/index.html index 31e01d9e7b0..b6127ee460a 100644 --- a/bn/docs/developers/faucet/index.html +++ b/bn/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/bn/docs/developers/foundry_guide/index.html b/bn/docs/developers/foundry_guide/index.html index daf7d91334b..7c2a710a8e7 100644 --- a/bn/docs/developers/foundry_guide/index.html +++ b/bn/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/bn/docs/developers/general-information/index.html b/bn/docs/developers/general-information/index.html index 280fee4b50d..e444e6ba7ff 100644 --- a/bn/docs/developers/general-information/index.html +++ b/bn/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/bn/docs/developers/hardhat_guide/index.html b/bn/docs/developers/hardhat_guide/index.html index 6ee2710c0c9..ae696d33817 100644 --- a/bn/docs/developers/hardhat_guide/index.html +++ b/bn/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/bn/docs/developers/intro/index.html b/bn/docs/developers/intro/index.html index 56c910bec8a..ee1d273896e 100644 --- a/bn/docs/developers/intro/index.html +++ b/bn/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/bn/docs/developers/local_development/index.html b/bn/docs/developers/local_development/index.html index 4766f5b0d21..332ebfb3d51 100644 --- a/bn/docs/developers/local_development/index.html +++ b/bn/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/bn/docs/developers/quick_start/index.html b/bn/docs/developers/quick_start/index.html index c3741ff925e..57075c89207 100644 --- a/bn/docs/developers/quick_start/index.html +++ b/bn/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/bn/docs/developers/remix_guide/index.html b/bn/docs/developers/remix_guide/index.html index 0ba53adb84e..9b59ea8b5b7 100644 --- a/bn/docs/developers/remix_guide/index.html +++ b/bn/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/bn/docs/developers/setting-up-metamask/index.html b/bn/docs/developers/setting-up-metamask/index.html index 557ef7d0aaf..f30efcc8687 100644 --- a/bn/docs/developers/setting-up-metamask/index.html +++ b/bn/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/bn/docs/intro/index.html b/bn/docs/intro/index.html index d0dff7e1cfe..8ac9f44f9a0 100644 --- a/bn/docs/intro/index.html +++ b/bn/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/bn/docs/operators_and_staking/intro/index.html b/bn/docs/operators_and_staking/intro/index.html index dc8ad81cede..b6a49027d29 100644 --- a/bn/docs/operators_and_staking/intro/index.html +++ b/bn/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/bn/docs/operators_and_staking/operators/index.html b/bn/docs/operators_and_staking/operators/index.html index 9d2ea2535e5..ed69f6e7271 100644 --- a/bn/docs/operators_and_staking/operators/index.html +++ b/bn/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/bn/docs/operators_and_staking/staking/index.html b/bn/docs/operators_and_staking/staking/index.html index 334637b728f..0d948029f76 100644 --- a/bn/docs/operators_and_staking/staking/index.html +++ b/bn/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/bn/docs/pre-release/category/community/index.html b/bn/docs/pre-release/category/community/index.html index 1c417db2477..1be6010c59e 100644 --- a/bn/docs/pre-release/category/community/index.html +++ b/bn/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/bn/docs/pre-release/category/developer-documentation/index.html b/bn/docs/pre-release/category/developer-documentation/index.html index a975815efd2..fd19eacf519 100644 --- a/bn/docs/pre-release/category/developer-documentation/index.html +++ b/bn/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/bn/docs/pre-release/category/get-started-with-farming/index.html b/bn/docs/pre-release/category/get-started-with-farming/index.html index ad94a875453..13bbb8fa57f 100644 --- a/bn/docs/pre-release/category/get-started-with-farming/index.html +++ b/bn/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/bn/docs/pre-release/category/operators-and-staking/index.html b/bn/docs/pre-release/category/operators-and-staking/index.html index 7cd9b53c92a..2e8ac2de5e0 100644 --- a/bn/docs/pre-release/category/operators-and-staking/index.html +++ b/bn/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/bn/docs/pre-release/category/wallets/index.html b/bn/docs/pre-release/category/wallets/index.html index b33418bce3f..61383eeb047 100644 --- a/bn/docs/pre-release/category/wallets/index.html +++ b/bn/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/bn/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/bn/docs/pre-release/community/CODE_OF_CONDUCT/index.html index 9643dba1d9c..43184b74d74 100644 --- a/bn/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/bn/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/community/contribute/index.html b/bn/docs/pre-release/community/contribute/index.html index f0260a5c7ea..478670bffc1 100644 --- a/bn/docs/pre-release/community/contribute/index.html +++ b/bn/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/community/index.html b/bn/docs/pre-release/community/index.html index ecab3a9a065..9811ffb8e77 100644 --- a/bn/docs/pre-release/community/index.html +++ b/bn/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/bn/docs/pre-release/community/translate/index.html b/bn/docs/pre-release/community/translate/index.html index 34a209f6e44..c91427d9f17 100644 --- a/bn/docs/pre-release/community/translate/index.html +++ b/bn/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/developers/block_explorer/index.html b/bn/docs/pre-release/developers/block_explorer/index.html index b3e94668703..c83dc3b16c9 100644 --- a/bn/docs/pre-release/developers/block_explorer/index.html +++ b/bn/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/developers/faucet/index.html b/bn/docs/pre-release/developers/faucet/index.html index 7131d158fd6..a1fba968ab1 100644 --- a/bn/docs/pre-release/developers/faucet/index.html +++ b/bn/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/developers/foundry_guide/index.html b/bn/docs/pre-release/developers/foundry_guide/index.html index f4589a07a46..9481ec0a3fb 100644 --- a/bn/docs/pre-release/developers/foundry_guide/index.html +++ b/bn/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/developers/general-information/index.html b/bn/docs/pre-release/developers/general-information/index.html index e8666a6e30f..07886f6f246 100644 --- a/bn/docs/pre-release/developers/general-information/index.html +++ b/bn/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/developers/hardhat_guide/index.html b/bn/docs/pre-release/developers/hardhat_guide/index.html index e51ce9c4884..745faa89ccd 100644 --- a/bn/docs/pre-release/developers/hardhat_guide/index.html +++ b/bn/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/bn/docs/pre-release/developers/intro/index.html b/bn/docs/pre-release/developers/intro/index.html index b9bb7c74d26..c8bada6c4d5 100644 --- a/bn/docs/pre-release/developers/intro/index.html +++ b/bn/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/developers/local_development/index.html b/bn/docs/pre-release/developers/local_development/index.html index 943445a884e..b6708c1af9f 100644 --- a/bn/docs/pre-release/developers/local_development/index.html +++ b/bn/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/developers/quick_start/index.html b/bn/docs/pre-release/developers/quick_start/index.html index 73b4bb8aa8d..9d06a9195c0 100644 --- a/bn/docs/pre-release/developers/quick_start/index.html +++ b/bn/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/developers/remix_guide/index.html b/bn/docs/pre-release/developers/remix_guide/index.html index 8750894bdfc..335afe57c7e 100644 --- a/bn/docs/pre-release/developers/remix_guide/index.html +++ b/bn/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/developers/setting-up-metamask/index.html b/bn/docs/pre-release/developers/setting-up-metamask/index.html index c96afdf6bac..c542965c721 100644 --- a/bn/docs/pre-release/developers/setting-up-metamask/index.html +++ b/bn/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/intro/index.html b/bn/docs/pre-release/intro/index.html index c0f3be5ac9f..a5c69158d87 100644 --- a/bn/docs/pre-release/intro/index.html +++ b/bn/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/operators_and_staking/intro/index.html b/bn/docs/pre-release/operators_and_staking/intro/index.html index 7ee6b358c63..1f711b7fee1 100644 --- a/bn/docs/pre-release/operators_and_staking/intro/index.html +++ b/bn/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/operators_and_staking/operators/index.html b/bn/docs/pre-release/operators_and_staking/operators/index.html index 426af2dede8..a5fda929a75 100644 --- a/bn/docs/pre-release/operators_and_staking/operators/index.html +++ b/bn/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/operators_and_staking/staking/index.html b/bn/docs/pre-release/operators_and_staking/staking/index.html index e95e114524c..e667280223f 100644 --- a/bn/docs/pre-release/operators_and_staking/staking/index.html +++ b/bn/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/bn/docs/pre-release/protocol/common_problems/index.html b/bn/docs/pre-release/protocol/common_problems/index.html index 995d9057feb..b48359307a2 100644 --- a/bn/docs/pre-release/protocol/common_problems/index.html +++ b/bn/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/protocol/port-forwarding/index.html b/bn/docs/pre-release/protocol/port-forwarding/index.html index 1d0fd052db6..ce719cba606 100644 --- a/bn/docs/pre-release/protocol/port-forwarding/index.html +++ b/bn/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/bn/docs/pre-release/protocol/pulsar/index.html b/bn/docs/pre-release/protocol/pulsar/index.html index 9031c35676d..36204c46800 100644 --- a/bn/docs/pre-release/protocol/pulsar/index.html +++ b/bn/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/protocol/security/index.html b/bn/docs/pre-release/protocol/security/index.html index 225e6c7452e..17e68b9f853 100644 --- a/bn/docs/pre-release/protocol/security/index.html +++ b/bn/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/protocol/substrate-cli/index.html b/bn/docs/pre-release/protocol/substrate-cli/index.html index 83821de4bcb..0f10024baf3 100644 --- a/bn/docs/pre-release/protocol/substrate-cli/index.html +++ b/bn/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/protocol/timekeeping/index.html b/bn/docs/pre-release/protocol/timekeeping/index.html index 251e24a6bd2..97c8f2698a1 100644 --- a/bn/docs/pre-release/protocol/timekeeping/index.html +++ b/bn/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/bn/docs/pre-release/protocol/wallets/polkadot/index.html b/bn/docs/pre-release/protocol/wallets/polkadot/index.html index 59a11af27b9..498eab64491 100644 --- a/bn/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/bn/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/bn/docs/pre-release/protocol/wallets/subwallet/index.html b/bn/docs/pre-release/protocol/wallets/subwallet/index.html index 422240d7de0..135fee4ec30 100644 --- a/bn/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/bn/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/bn/docs/protocol/common_problems/index.html b/bn/docs/protocol/common_problems/index.html index b29f04058b5..3819887764a 100644 --- a/bn/docs/protocol/common_problems/index.html +++ b/bn/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/bn/docs/protocol/port-forwarding/index.html b/bn/docs/protocol/port-forwarding/index.html index a277cd41803..f7a67302171 100644 --- a/bn/docs/protocol/port-forwarding/index.html +++ b/bn/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/bn/docs/protocol/pulsar/index.html b/bn/docs/protocol/pulsar/index.html index 63ce70331af..a2b54c5828b 100644 --- a/bn/docs/protocol/pulsar/index.html +++ b/bn/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/bn/docs/protocol/security/index.html b/bn/docs/protocol/security/index.html index 4d5376c51ce..4626b0c851b 100644 --- a/bn/docs/protocol/security/index.html +++ b/bn/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/bn/docs/protocol/substrate-cli/index.html b/bn/docs/protocol/substrate-cli/index.html index 769986f4b6b..4d5ca292826 100644 --- a/bn/docs/protocol/substrate-cli/index.html +++ b/bn/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/bn/docs/protocol/timekeeping/index.html b/bn/docs/protocol/timekeeping/index.html index c1984278acc..fc2e97bdec2 100644 --- a/bn/docs/protocol/timekeeping/index.html +++ b/bn/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/bn/docs/protocol/wallets/polkadot/index.html b/bn/docs/protocol/wallets/polkadot/index.html index 94142bdcb27..951693ea205 100644 --- a/bn/docs/protocol/wallets/polkadot/index.html +++ b/bn/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/bn/docs/protocol/wallets/subwallet/index.html b/bn/docs/protocol/wallets/subwallet/index.html index 493e90e18a1..549cad7ad1f 100644 --- a/bn/docs/protocol/wallets/subwallet/index.html +++ b/bn/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/bn/index.html b/bn/index.html index 24bcb8da91b..396f15e379c 100644 --- a/bn/index.html +++ b/bn/index.html @@ -7,13 +7,13 @@ - +

    যেখানেই ফার্ম

    অতিরিক্ত ডিস্ক প্রতিজ্ঞা করে একটি ফার্মার নোড চালানোর মাধ্যমে পুরস্কার অর্জন করুন। কোনও দামি সেটআপ বা আগের মূলধন প্রয়োজন নেই।

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/bn/markdown-page/index.html b/bn/markdown-page/index.html index c33d22b6460..4f328599714 100644 --- a/bn/markdown-page/index.html +++ b/bn/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/de/404.html b/de/404.html index d421685a2b8..934c61a116a 100644 --- a/de/404.html +++ b/de/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/de/assets/js/814b9812.a7f1a58c.js b/de/assets/js/814b9812.4fa9e17b.js similarity index 73% rename from de/assets/js/814b9812.a7f1a58c.js rename to de/assets/js/814b9812.4fa9e17b.js index 699c7049c30..c07ad923f96 100644 --- a/de/assets/js/814b9812.a7f1a58c.js +++ b/de/assets/js/814b9812.4fa9e17b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[6032],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/de/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/de/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/de/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/de/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/de/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[6032],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/de/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/de/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/de/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/de/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/de/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/de/assets/js/runtime~main.427ada61.js b/de/assets/js/runtime~main.7c8579f5.js similarity index 99% rename from de/assets/js/runtime~main.427ada61.js rename to de/assets/js/runtime~main.7c8579f5.js index 5951f448856..1e9f5c8c226 100644 --- a/de/assets/js/runtime~main.427ada61.js +++ b/de/assets/js/runtime~main.7c8579f5.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,d,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={exports:{}};return b[e].call(f.exports,f,f.exports,r),f.exports}r.m=b,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",158:"8a5d81bd",203:"2a99e1c9",389:"a7abe2c2",429:"574e6163",481:"a7a52b40",702:"8751e3e4",864:"c49e7b84",1232:"2b1b8d96",1280:"5bfc32c8",1618:"b7bee5d9",1723:"d9aa5671",1781:"041fb267",1868:"51aec4fb",1911:"86a3976e",2005:"5839fb81",2011:"829302dd",2058:"42151b63",2089:"11d826cf",2288:"bfd61d37",2608:"bc691d7c",2664:"6a516a95",2964:"bfaa2cb0",3085:"1f391b9e",3225:"0aabd3e1",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3670:"362ade06",3781:"8ef84c93",4127:"d3dcbe6c",4289:"213a5222",4301:"9c050755",4557:"e25580f0",4737:"880e3ec8",4744:"bac4c6db",4943:"5e93039e",5101:"590d8825",5234:"7f5fec75",5331:"733d2749",5620:"1ad1918c",5818:"81a03d83",5842:"3f86ee66",5918:"98441140",6032:"814b9812",6439:"92fbd6ec",6482:"1e71864f",6585:"e3a71e0a",6664:"8dd78643",6682:"25d0ee3c",6778:"0a0b9480",7311:"70afe839",7326:"5a3f9f86",7370:"c09f4ff7",7414:"393be207",7432:"55e5b84e",7484:"32d4887e",7607:"1f2e45ab",7736:"066c401f",7918:"17896441",8614:"f81815fe",9176:"63cb2621",9187:"89729ec1",9360:"1cfdef7b",9378:"bdd0e73b",9394:"82d27a5d",9492:"52aa0c94",9514:"1be78505",9573:"4ea75272",9768:"554761f9",9817:"14eb3368",9998:"4a2e19e0"}[e]||e)+"."+{53:"6e958589",158:"21e2a9f8",203:"1196087b",389:"2f9dffaf",429:"0775da2d",481:"c0bfd978",702:"182fca9c",814:"dc8c3a26",864:"c6385bee",1232:"36b9f0b7",1280:"04e956f6",1618:"f409def2",1723:"1c5bbbe7",1781:"bc5a652b",1868:"73d2e6f6",1911:"37442cf7",2005:"6600298c",2011:"2d8313f9",2058:"9ba28d3b",2089:"ce42c70a",2288:"d5fd7736",2608:"871fd033",2664:"933dfb81",2964:"e3958071",3085:"3a447380",3203:"d4e13d9e",3225:"b72a3a58",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3670:"34d0c5ce",3781:"90000b72",4127:"a2aef035",4289:"a733abe7",4301:"89d9d0dd",4557:"e5f87dec",4737:"16536a30",4744:"a9a56544",4943:"0df471fc",4972:"4a54fd4a",5101:"c8efe4fe",5234:"3edccdea",5331:"9b54eeec",5620:"4b494955",5818:"ed3f900d",5842:"7f6eeadc",5918:"20160429",6032:"a7f1a58c",6439:"cff20dd3",6482:"0630a92e",6585:"595e4702",6664:"2dc0e032",6682:"2f5e16e7",6778:"0c1b9007",7311:"16b5c693",7326:"b68be127",7370:"33520625",7414:"ff35eb51",7432:"49a01407",7484:"57e3fb36",7607:"653171dd",7736:"e733d064",7918:"e3da5265",8614:"5a2d165c",9176:"57a008f4",9187:"60ea8537",9360:"1c1ca15a",9378:"e2b1929a",9394:"27b32d7d",9492:"e4f8bc0c",9514:"478c02c6",9573:"36aea8f7",9768:"da9e2ecc",9817:"b7ea7ab7",9998:"b00727bd"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},c="portal:",r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/de/",r.gca=function(e){return e={17896441:"7918",98441140:"5918","935f2afb":"53","8a5d81bd":"158","2a99e1c9":"203",a7abe2c2:"389","574e6163":"429",a7a52b40:"481","8751e3e4":"702",c49e7b84:"864","2b1b8d96":"1232","5bfc32c8":"1280",b7bee5d9:"1618",d9aa5671:"1723","041fb267":"1781","51aec4fb":"1868","86a3976e":"1911","5839fb81":"2005","829302dd":"2011","42151b63":"2058","11d826cf":"2089",bfd61d37:"2288",bc691d7c:"2608","6a516a95":"2664",bfaa2cb0:"2964","1f391b9e":"3085","0aabd3e1":"3225",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","362ade06":"3670","8ef84c93":"3781",d3dcbe6c:"4127","213a5222":"4289","9c050755":"4301",e25580f0:"4557","880e3ec8":"4737",bac4c6db:"4744","5e93039e":"4943","590d8825":"5101","7f5fec75":"5234","733d2749":"5331","1ad1918c":"5620","81a03d83":"5818","3f86ee66":"5842","814b9812":"6032","92fbd6ec":"6439","1e71864f":"6482",e3a71e0a:"6585","8dd78643":"6664","25d0ee3c":"6682","0a0b9480":"6778","70afe839":"7311","5a3f9f86":"7326",c09f4ff7:"7370","393be207":"7414","55e5b84e":"7432","32d4887e":"7484","1f2e45ab":"7607","066c401f":"7736",f81815fe:"8614","63cb2621":"9176","89729ec1":"9187","1cfdef7b":"9360",bdd0e73b:"9378","82d27a5d":"9394","52aa0c94":"9492","1be78505":"9514","4ea75272":"9573","554761f9":"9768","14eb3368":"9817","4a2e19e0":"9998"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>d=e[a]=[f,c]));f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n{"use strict";var e,a,f,d,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={exports:{}};return b[e].call(f.exports,f,f.exports,r),f.exports}r.m=b,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",158:"8a5d81bd",203:"2a99e1c9",389:"a7abe2c2",429:"574e6163",481:"a7a52b40",702:"8751e3e4",864:"c49e7b84",1232:"2b1b8d96",1280:"5bfc32c8",1618:"b7bee5d9",1723:"d9aa5671",1781:"041fb267",1868:"51aec4fb",1911:"86a3976e",2005:"5839fb81",2011:"829302dd",2058:"42151b63",2089:"11d826cf",2288:"bfd61d37",2608:"bc691d7c",2664:"6a516a95",2964:"bfaa2cb0",3085:"1f391b9e",3225:"0aabd3e1",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3670:"362ade06",3781:"8ef84c93",4127:"d3dcbe6c",4289:"213a5222",4301:"9c050755",4557:"e25580f0",4737:"880e3ec8",4744:"bac4c6db",4943:"5e93039e",5101:"590d8825",5234:"7f5fec75",5331:"733d2749",5620:"1ad1918c",5818:"81a03d83",5842:"3f86ee66",5918:"98441140",6032:"814b9812",6439:"92fbd6ec",6482:"1e71864f",6585:"e3a71e0a",6664:"8dd78643",6682:"25d0ee3c",6778:"0a0b9480",7311:"70afe839",7326:"5a3f9f86",7370:"c09f4ff7",7414:"393be207",7432:"55e5b84e",7484:"32d4887e",7607:"1f2e45ab",7736:"066c401f",7918:"17896441",8614:"f81815fe",9176:"63cb2621",9187:"89729ec1",9360:"1cfdef7b",9378:"bdd0e73b",9394:"82d27a5d",9492:"52aa0c94",9514:"1be78505",9573:"4ea75272",9768:"554761f9",9817:"14eb3368",9998:"4a2e19e0"}[e]||e)+"."+{53:"6e958589",158:"21e2a9f8",203:"1196087b",389:"2f9dffaf",429:"0775da2d",481:"c0bfd978",702:"182fca9c",814:"dc8c3a26",864:"c6385bee",1232:"36b9f0b7",1280:"04e956f6",1618:"f409def2",1723:"1c5bbbe7",1781:"bc5a652b",1868:"73d2e6f6",1911:"37442cf7",2005:"6600298c",2011:"2d8313f9",2058:"9ba28d3b",2089:"ce42c70a",2288:"d5fd7736",2608:"871fd033",2664:"933dfb81",2964:"e3958071",3085:"3a447380",3203:"d4e13d9e",3225:"b72a3a58",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3670:"34d0c5ce",3781:"90000b72",4127:"a2aef035",4289:"a733abe7",4301:"89d9d0dd",4557:"e5f87dec",4737:"16536a30",4744:"a9a56544",4943:"0df471fc",4972:"4a54fd4a",5101:"c8efe4fe",5234:"3edccdea",5331:"9b54eeec",5620:"4b494955",5818:"ed3f900d",5842:"7f6eeadc",5918:"20160429",6032:"4fa9e17b",6439:"cff20dd3",6482:"0630a92e",6585:"595e4702",6664:"2dc0e032",6682:"2f5e16e7",6778:"0c1b9007",7311:"16b5c693",7326:"b68be127",7370:"33520625",7414:"ff35eb51",7432:"49a01407",7484:"57e3fb36",7607:"653171dd",7736:"e733d064",7918:"e3da5265",8614:"5a2d165c",9176:"57a008f4",9187:"60ea8537",9360:"1c1ca15a",9378:"e2b1929a",9394:"27b32d7d",9492:"e4f8bc0c",9514:"478c02c6",9573:"36aea8f7",9768:"da9e2ecc",9817:"b7ea7ab7",9998:"b00727bd"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},c="portal:",r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/de/",r.gca=function(e){return e={17896441:"7918",98441140:"5918","935f2afb":"53","8a5d81bd":"158","2a99e1c9":"203",a7abe2c2:"389","574e6163":"429",a7a52b40:"481","8751e3e4":"702",c49e7b84:"864","2b1b8d96":"1232","5bfc32c8":"1280",b7bee5d9:"1618",d9aa5671:"1723","041fb267":"1781","51aec4fb":"1868","86a3976e":"1911","5839fb81":"2005","829302dd":"2011","42151b63":"2058","11d826cf":"2089",bfd61d37:"2288",bc691d7c:"2608","6a516a95":"2664",bfaa2cb0:"2964","1f391b9e":"3085","0aabd3e1":"3225",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","362ade06":"3670","8ef84c93":"3781",d3dcbe6c:"4127","213a5222":"4289","9c050755":"4301",e25580f0:"4557","880e3ec8":"4737",bac4c6db:"4744","5e93039e":"4943","590d8825":"5101","7f5fec75":"5234","733d2749":"5331","1ad1918c":"5620","81a03d83":"5818","3f86ee66":"5842","814b9812":"6032","92fbd6ec":"6439","1e71864f":"6482",e3a71e0a:"6585","8dd78643":"6664","25d0ee3c":"6682","0a0b9480":"6778","70afe839":"7311","5a3f9f86":"7326",c09f4ff7:"7370","393be207":"7414","55e5b84e":"7432","32d4887e":"7484","1f2e45ab":"7607","066c401f":"7736",f81815fe:"8614","63cb2621":"9176","89729ec1":"9187","1cfdef7b":"9360",bdd0e73b:"9378","82d27a5d":"9394","52aa0c94":"9492","1be78505":"9514","4ea75272":"9573","554761f9":"9768","14eb3368":"9817","4a2e19e0":"9998"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>d=e[a]=[f,c]));f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n - + - + \ No newline at end of file diff --git a/de/docs/category/developer-documentation/index.html b/de/docs/category/developer-documentation/index.html index 95d5517a820..aaba644ea9a 100644 --- a/de/docs/category/developer-documentation/index.html +++ b/de/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/de/docs/category/get-started-with-farming/index.html b/de/docs/category/get-started-with-farming/index.html index c2346e79a74..bd0523f9efb 100644 --- a/de/docs/category/get-started-with-farming/index.html +++ b/de/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/de/docs/category/operators-and-staking/index.html b/de/docs/category/operators-and-staking/index.html index 90a918ed4b5..5de0b47402d 100644 --- a/de/docs/category/operators-and-staking/index.html +++ b/de/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/de/docs/category/wallets/index.html b/de/docs/category/wallets/index.html index c2821ee837a..13a36dcf19e 100644 --- a/de/docs/category/wallets/index.html +++ b/de/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/de/docs/community/CODE_OF_CONDUCT/index.html b/de/docs/community/CODE_OF_CONDUCT/index.html index bb51947526b..0e8d2b96366 100644 --- a/de/docs/community/CODE_OF_CONDUCT/index.html +++ b/de/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/de/docs/community/contribute/index.html b/de/docs/community/contribute/index.html index bae23bacd01..27ec2afd7c9 100644 --- a/de/docs/community/contribute/index.html +++ b/de/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/de/docs/community/index.html b/de/docs/community/index.html index 5f391ff3d8b..fb4a1d3e1f2 100644 --- a/de/docs/community/index.html +++ b/de/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/de/docs/community/translate/index.html b/de/docs/community/translate/index.html index fe91dbdcc0c..a28552ee4ec 100644 --- a/de/docs/community/translate/index.html +++ b/de/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/de/docs/developers/block_explorer/index.html b/de/docs/developers/block_explorer/index.html index ea7dae939d6..01b1c74378d 100644 --- a/de/docs/developers/block_explorer/index.html +++ b/de/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/de/docs/developers/faucet/index.html b/de/docs/developers/faucet/index.html index 78df181b79f..4ab64385cd5 100644 --- a/de/docs/developers/faucet/index.html +++ b/de/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/de/docs/developers/foundry_guide/index.html b/de/docs/developers/foundry_guide/index.html index 1e27bc92b3c..d5f889052c4 100644 --- a/de/docs/developers/foundry_guide/index.html +++ b/de/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/de/docs/developers/general-information/index.html b/de/docs/developers/general-information/index.html index 145eeb2a18f..cec878c941f 100644 --- a/de/docs/developers/general-information/index.html +++ b/de/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/de/docs/developers/hardhat_guide/index.html b/de/docs/developers/hardhat_guide/index.html index 89344d50e0d..5f2aeebf111 100644 --- a/de/docs/developers/hardhat_guide/index.html +++ b/de/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/de/docs/developers/intro/index.html b/de/docs/developers/intro/index.html index d6ea83fb764..b40676179f3 100644 --- a/de/docs/developers/intro/index.html +++ b/de/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/de/docs/developers/local_development/index.html b/de/docs/developers/local_development/index.html index 365db055460..2b75cc70833 100644 --- a/de/docs/developers/local_development/index.html +++ b/de/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/de/docs/developers/quick_start/index.html b/de/docs/developers/quick_start/index.html index ba5f479f600..4252589c779 100644 --- a/de/docs/developers/quick_start/index.html +++ b/de/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/de/docs/developers/remix_guide/index.html b/de/docs/developers/remix_guide/index.html index ced7b53e937..e6c70b5bbe4 100644 --- a/de/docs/developers/remix_guide/index.html +++ b/de/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/de/docs/developers/setting-up-metamask/index.html b/de/docs/developers/setting-up-metamask/index.html index 96e9a82867a..5904dbb8565 100644 --- a/de/docs/developers/setting-up-metamask/index.html +++ b/de/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/de/docs/intro/index.html b/de/docs/intro/index.html index 73e93635fd3..8b95236bec9 100644 --- a/de/docs/intro/index.html +++ b/de/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/de/docs/operators_and_staking/intro/index.html b/de/docs/operators_and_staking/intro/index.html index 07d4b1d6f43..22589143903 100644 --- a/de/docs/operators_and_staking/intro/index.html +++ b/de/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/de/docs/operators_and_staking/operators/index.html b/de/docs/operators_and_staking/operators/index.html index 323413c0b5e..6c3f4813a73 100644 --- a/de/docs/operators_and_staking/operators/index.html +++ b/de/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/de/docs/operators_and_staking/staking/index.html b/de/docs/operators_and_staking/staking/index.html index 646d885f9b3..d363252df3d 100644 --- a/de/docs/operators_and_staking/staking/index.html +++ b/de/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/de/docs/pre-release/category/community/index.html b/de/docs/pre-release/category/community/index.html index 3496cda90a9..09c4ab96718 100644 --- a/de/docs/pre-release/category/community/index.html +++ b/de/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/de/docs/pre-release/category/developer-documentation/index.html b/de/docs/pre-release/category/developer-documentation/index.html index edcd17f0d57..cfb24a3ce08 100644 --- a/de/docs/pre-release/category/developer-documentation/index.html +++ b/de/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/de/docs/pre-release/category/get-started-with-farming/index.html b/de/docs/pre-release/category/get-started-with-farming/index.html index c61918a0479..b48258badf9 100644 --- a/de/docs/pre-release/category/get-started-with-farming/index.html +++ b/de/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/de/docs/pre-release/category/operators-and-staking/index.html b/de/docs/pre-release/category/operators-and-staking/index.html index 06f74a9577b..6988c4cd148 100644 --- a/de/docs/pre-release/category/operators-and-staking/index.html +++ b/de/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/de/docs/pre-release/category/wallets/index.html b/de/docs/pre-release/category/wallets/index.html index 597aaf78cc8..4db4c2dc51a 100644 --- a/de/docs/pre-release/category/wallets/index.html +++ b/de/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/de/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/de/docs/pre-release/community/CODE_OF_CONDUCT/index.html index cbcf20e9654..a2f16ee6e1b 100644 --- a/de/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/de/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/de/docs/pre-release/community/contribute/index.html b/de/docs/pre-release/community/contribute/index.html index a09ab19fb6a..e68ea28ae34 100644 --- a/de/docs/pre-release/community/contribute/index.html +++ b/de/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/de/docs/pre-release/community/index.html b/de/docs/pre-release/community/index.html index d40d8d92cbe..a93de4382c9 100644 --- a/de/docs/pre-release/community/index.html +++ b/de/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/de/docs/pre-release/community/translate/index.html b/de/docs/pre-release/community/translate/index.html index 6363de3d54b..311c7e25396 100644 --- a/de/docs/pre-release/community/translate/index.html +++ b/de/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/de/docs/pre-release/developers/block_explorer/index.html b/de/docs/pre-release/developers/block_explorer/index.html index 7df40255a5d..dc85f9a5ae5 100644 --- a/de/docs/pre-release/developers/block_explorer/index.html +++ b/de/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/de/docs/pre-release/developers/faucet/index.html b/de/docs/pre-release/developers/faucet/index.html index 1274b8effc4..1352f1d1c48 100644 --- a/de/docs/pre-release/developers/faucet/index.html +++ b/de/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/de/docs/pre-release/developers/foundry_guide/index.html b/de/docs/pre-release/developers/foundry_guide/index.html index 65f0c890161..b02d0925216 100644 --- a/de/docs/pre-release/developers/foundry_guide/index.html +++ b/de/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/de/docs/pre-release/developers/general-information/index.html b/de/docs/pre-release/developers/general-information/index.html index 8092627a420..a6b1021a4fe 100644 --- a/de/docs/pre-release/developers/general-information/index.html +++ b/de/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/de/docs/pre-release/developers/hardhat_guide/index.html b/de/docs/pre-release/developers/hardhat_guide/index.html index 867cf44fa01..c9ae6a4ea9f 100644 --- a/de/docs/pre-release/developers/hardhat_guide/index.html +++ b/de/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/de/docs/pre-release/developers/intro/index.html b/de/docs/pre-release/developers/intro/index.html index 2b502722c09..960416d6451 100644 --- a/de/docs/pre-release/developers/intro/index.html +++ b/de/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/de/docs/pre-release/developers/local_development/index.html b/de/docs/pre-release/developers/local_development/index.html index b7e284c538e..3e980568621 100644 --- a/de/docs/pre-release/developers/local_development/index.html +++ b/de/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/de/docs/pre-release/developers/quick_start/index.html b/de/docs/pre-release/developers/quick_start/index.html index 70b610a3a0c..f4347e94119 100644 --- a/de/docs/pre-release/developers/quick_start/index.html +++ b/de/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/de/docs/pre-release/developers/remix_guide/index.html b/de/docs/pre-release/developers/remix_guide/index.html index f4968eb2390..d9c78bbca9b 100644 --- a/de/docs/pre-release/developers/remix_guide/index.html +++ b/de/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/de/docs/pre-release/developers/setting-up-metamask/index.html b/de/docs/pre-release/developers/setting-up-metamask/index.html index 1b587956a5b..def1c0a4d6d 100644 --- a/de/docs/pre-release/developers/setting-up-metamask/index.html +++ b/de/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/de/docs/pre-release/intro/index.html b/de/docs/pre-release/intro/index.html index 4dc990b3ccb..3248c4aa0c3 100644 --- a/de/docs/pre-release/intro/index.html +++ b/de/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/de/docs/pre-release/operators_and_staking/intro/index.html b/de/docs/pre-release/operators_and_staking/intro/index.html index 1d842139392..e4b497b53ce 100644 --- a/de/docs/pre-release/operators_and_staking/intro/index.html +++ b/de/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/de/docs/pre-release/operators_and_staking/operators/index.html b/de/docs/pre-release/operators_and_staking/operators/index.html index 96369560ff3..de125b5cc30 100644 --- a/de/docs/pre-release/operators_and_staking/operators/index.html +++ b/de/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/de/docs/pre-release/operators_and_staking/staking/index.html b/de/docs/pre-release/operators_and_staking/staking/index.html index bcab3b97938..7a09af53635 100644 --- a/de/docs/pre-release/operators_and_staking/staking/index.html +++ b/de/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/de/docs/pre-release/protocol/common_problems/index.html b/de/docs/pre-release/protocol/common_problems/index.html index a2f41116d36..a49b4e4c495 100644 --- a/de/docs/pre-release/protocol/common_problems/index.html +++ b/de/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/de/docs/pre-release/protocol/port-forwarding/index.html b/de/docs/pre-release/protocol/port-forwarding/index.html index ad2f992f55e..4d8f30877cf 100644 --- a/de/docs/pre-release/protocol/port-forwarding/index.html +++ b/de/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/de/docs/pre-release/protocol/pulsar/index.html b/de/docs/pre-release/protocol/pulsar/index.html index 078a5566446..dcad534e4ea 100644 --- a/de/docs/pre-release/protocol/pulsar/index.html +++ b/de/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/de/docs/pre-release/protocol/security/index.html b/de/docs/pre-release/protocol/security/index.html index 61fe1d7b4d3..b81d79ac46e 100644 --- a/de/docs/pre-release/protocol/security/index.html +++ b/de/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/de/docs/pre-release/protocol/substrate-cli/index.html b/de/docs/pre-release/protocol/substrate-cli/index.html index 4ab661a0d71..1a471971b46 100644 --- a/de/docs/pre-release/protocol/substrate-cli/index.html +++ b/de/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/de/docs/pre-release/protocol/timekeeping/index.html b/de/docs/pre-release/protocol/timekeeping/index.html index 43ed205ebf6..c98dedae91c 100644 --- a/de/docs/pre-release/protocol/timekeeping/index.html +++ b/de/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/de/docs/pre-release/protocol/wallets/polkadot/index.html b/de/docs/pre-release/protocol/wallets/polkadot/index.html index cc3b9d7c3e2..0ed8ab479e9 100644 --- a/de/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/de/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/de/docs/pre-release/protocol/wallets/subwallet/index.html b/de/docs/pre-release/protocol/wallets/subwallet/index.html index d074d6e2722..6cff889ae93 100644 --- a/de/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/de/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/de/docs/protocol/common_problems/index.html b/de/docs/protocol/common_problems/index.html index 92397a9a774..f5a9905dd8c 100644 --- a/de/docs/protocol/common_problems/index.html +++ b/de/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/de/docs/protocol/port-forwarding/index.html b/de/docs/protocol/port-forwarding/index.html index a7ca21310ca..788e7bec9e4 100644 --- a/de/docs/protocol/port-forwarding/index.html +++ b/de/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/de/docs/protocol/pulsar/index.html b/de/docs/protocol/pulsar/index.html index cdff58aac38..012020344a3 100644 --- a/de/docs/protocol/pulsar/index.html +++ b/de/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/de/docs/protocol/security/index.html b/de/docs/protocol/security/index.html index 792840100a7..2b069d0ef03 100644 --- a/de/docs/protocol/security/index.html +++ b/de/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/de/docs/protocol/substrate-cli/index.html b/de/docs/protocol/substrate-cli/index.html index ea1dfbb11b5..62a4b16240b 100644 --- a/de/docs/protocol/substrate-cli/index.html +++ b/de/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/de/docs/protocol/timekeeping/index.html b/de/docs/protocol/timekeeping/index.html index 4823f0abcc7..2b484e2d9e4 100644 --- a/de/docs/protocol/timekeeping/index.html +++ b/de/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/de/docs/protocol/wallets/polkadot/index.html b/de/docs/protocol/wallets/polkadot/index.html index 65eb7c76db3..eb136dabc31 100644 --- a/de/docs/protocol/wallets/polkadot/index.html +++ b/de/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/de/docs/protocol/wallets/subwallet/index.html b/de/docs/protocol/wallets/subwallet/index.html index e81cd932129..288f8e8d865 100644 --- a/de/docs/protocol/wallets/subwallet/index.html +++ b/de/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/de/index.html b/de/index.html index 3515e56506d..6c71e3cf12a 100644 --- a/de/index.html +++ b/de/index.html @@ -7,13 +7,13 @@ - +

    Farm von Überall

    Verdienen Sie Belohnungen, indem Sie einen Landwirtschaftsknoten betreiben, indem Sie freie Festplattenkapazität zusagen. Keine teure Einrichtung oder Vorabkapital erforderlich.

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/de/markdown-page/index.html b/de/markdown-page/index.html index 569bbeee617..5543c5de6d2 100644 --- a/de/markdown-page/index.html +++ b/de/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/docs/category/community/index.html b/docs/category/community/index.html index c70bbcd3d51..c2b726b95c2 100644 --- a/docs/category/community/index.html +++ b/docs/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/docs/category/developer-documentation/index.html b/docs/category/developer-documentation/index.html index bb2af85a884..36099dd4334 100644 --- a/docs/category/developer-documentation/index.html +++ b/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/category/get-started-with-farming/index.html b/docs/category/get-started-with-farming/index.html index 33f03aee8d6..65e58f81305 100644 --- a/docs/category/get-started-with-farming/index.html +++ b/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/docs/category/operators-and-staking/index.html b/docs/category/operators-and-staking/index.html index 287ab645fa4..311016c6999 100644 --- a/docs/category/operators-and-staking/index.html +++ b/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/docs/category/wallets/index.html b/docs/category/wallets/index.html index 5153207ff12..4d144550379 100644 --- a/docs/category/wallets/index.html +++ b/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/docs/community/CODE_OF_CONDUCT/index.html b/docs/community/CODE_OF_CONDUCT/index.html index 103d1762dc1..1923deeaef8 100644 --- a/docs/community/CODE_OF_CONDUCT/index.html +++ b/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/docs/community/contribute/index.html b/docs/community/contribute/index.html index cec055036f0..319f23be9e2 100644 --- a/docs/community/contribute/index.html +++ b/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/docs/community/index.html b/docs/community/index.html index cbbdf35778d..e09317c123a 100644 --- a/docs/community/index.html +++ b/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/docs/community/translate/index.html b/docs/community/translate/index.html index b858013dd7c..8706ccb6ba7 100644 --- a/docs/community/translate/index.html +++ b/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/docs/developers/block_explorer/index.html b/docs/developers/block_explorer/index.html index bb31411ba7f..0c2bb0ec398 100644 --- a/docs/developers/block_explorer/index.html +++ b/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/docs/developers/faucet/index.html b/docs/developers/faucet/index.html index b301605ddbe..827e2abce73 100644 --- a/docs/developers/faucet/index.html +++ b/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/docs/developers/foundry_guide/index.html b/docs/developers/foundry_guide/index.html index a10bf4be332..48dd8a774ca 100644 --- a/docs/developers/foundry_guide/index.html +++ b/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/docs/developers/general-information/index.html b/docs/developers/general-information/index.html index f0165f705f0..400f5a49c22 100644 --- a/docs/developers/general-information/index.html +++ b/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/docs/developers/hardhat_guide/index.html b/docs/developers/hardhat_guide/index.html index ff9c422bfa1..74be23c66ff 100644 --- a/docs/developers/hardhat_guide/index.html +++ b/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/docs/developers/intro/index.html b/docs/developers/intro/index.html index d1e6d653560..6b86af89ef6 100644 --- a/docs/developers/intro/index.html +++ b/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/docs/developers/local_development/index.html b/docs/developers/local_development/index.html index 10524a93af2..41f5f7eee5b 100644 --- a/docs/developers/local_development/index.html +++ b/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/docs/developers/quick_start/index.html b/docs/developers/quick_start/index.html index 1f801cb7925..3250c34c4a4 100644 --- a/docs/developers/quick_start/index.html +++ b/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/docs/developers/remix_guide/index.html b/docs/developers/remix_guide/index.html index 6327efcca3f..97ae513bb99 100644 --- a/docs/developers/remix_guide/index.html +++ b/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/docs/developers/setting-up-metamask/index.html b/docs/developers/setting-up-metamask/index.html index 0d11036f42b..82f74f95cf3 100644 --- a/docs/developers/setting-up-metamask/index.html +++ b/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/docs/intro/index.html b/docs/intro/index.html index 6b56991931e..7a8a25823cf 100644 --- a/docs/intro/index.html +++ b/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/docs/operators_and_staking/intro/index.html b/docs/operators_and_staking/intro/index.html index c46df5c47b7..b568d8b0dc4 100644 --- a/docs/operators_and_staking/intro/index.html +++ b/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/docs/operators_and_staking/operators/index.html b/docs/operators_and_staking/operators/index.html index 2fc017dcd61..faca7431752 100644 --- a/docs/operators_and_staking/operators/index.html +++ b/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/docs/operators_and_staking/staking/index.html b/docs/operators_and_staking/staking/index.html index f1a80e1ad21..5e5d99b48bc 100644 --- a/docs/operators_and_staking/staking/index.html +++ b/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/docs/pre-release/category/community/index.html b/docs/pre-release/category/community/index.html index cf0469d1675..17c1fb6a3a7 100644 --- a/docs/pre-release/category/community/index.html +++ b/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/docs/pre-release/category/developer-documentation/index.html b/docs/pre-release/category/developer-documentation/index.html index 5292f2cc12b..034fab41145 100644 --- a/docs/pre-release/category/developer-documentation/index.html +++ b/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/pre-release/category/get-started-with-farming/index.html b/docs/pre-release/category/get-started-with-farming/index.html index feaf37b4b81..45d1e70ff1a 100644 --- a/docs/pre-release/category/get-started-with-farming/index.html +++ b/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/pre-release/category/operators-and-staking/index.html b/docs/pre-release/category/operators-and-staking/index.html index 6ab8171aa13..f48fe72187b 100644 --- a/docs/pre-release/category/operators-and-staking/index.html +++ b/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/docs/pre-release/category/wallets/index.html b/docs/pre-release/category/wallets/index.html index 9f1f251b05e..18418514914 100644 --- a/docs/pre-release/category/wallets/index.html +++ b/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/docs/pre-release/community/CODE_OF_CONDUCT/index.html index 97fd081155f..8f02cd2ebcf 100644 --- a/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/docs/pre-release/community/contribute/index.html b/docs/pre-release/community/contribute/index.html index db6a77b3ab8..42b2ed15306 100644 --- a/docs/pre-release/community/contribute/index.html +++ b/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/docs/pre-release/community/index.html b/docs/pre-release/community/index.html index 058012b8c2c..dc5b1d99774 100644 --- a/docs/pre-release/community/index.html +++ b/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/docs/pre-release/community/translate/index.html b/docs/pre-release/community/translate/index.html index 10e4eb65afb..3504a697dab 100644 --- a/docs/pre-release/community/translate/index.html +++ b/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/docs/pre-release/developers/block_explorer/index.html b/docs/pre-release/developers/block_explorer/index.html index b13cc88f2dc..d26627a5a24 100644 --- a/docs/pre-release/developers/block_explorer/index.html +++ b/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/docs/pre-release/developers/faucet/index.html b/docs/pre-release/developers/faucet/index.html index f74eff465f2..5bad56123d6 100644 --- a/docs/pre-release/developers/faucet/index.html +++ b/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/docs/pre-release/developers/foundry_guide/index.html b/docs/pre-release/developers/foundry_guide/index.html index 8a37ef8888b..4cddb1e1120 100644 --- a/docs/pre-release/developers/foundry_guide/index.html +++ b/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/docs/pre-release/developers/general-information/index.html b/docs/pre-release/developers/general-information/index.html index e1ddcba64ad..9869004ca6b 100644 --- a/docs/pre-release/developers/general-information/index.html +++ b/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/docs/pre-release/developers/hardhat_guide/index.html b/docs/pre-release/developers/hardhat_guide/index.html index 7596af53a62..336dc279c81 100644 --- a/docs/pre-release/developers/hardhat_guide/index.html +++ b/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/docs/pre-release/developers/intro/index.html b/docs/pre-release/developers/intro/index.html index 039d14312e3..b4c88908b31 100644 --- a/docs/pre-release/developers/intro/index.html +++ b/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/docs/pre-release/developers/local_development/index.html b/docs/pre-release/developers/local_development/index.html index 5b32d9690c7..0456963da49 100644 --- a/docs/pre-release/developers/local_development/index.html +++ b/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/docs/pre-release/developers/quick_start/index.html b/docs/pre-release/developers/quick_start/index.html index 61c983f9a03..6eda617dd71 100644 --- a/docs/pre-release/developers/quick_start/index.html +++ b/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/docs/pre-release/developers/remix_guide/index.html b/docs/pre-release/developers/remix_guide/index.html index a9a7d2aaf69..0daeb783775 100644 --- a/docs/pre-release/developers/remix_guide/index.html +++ b/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/docs/pre-release/developers/setting-up-metamask/index.html b/docs/pre-release/developers/setting-up-metamask/index.html index 28da48bcf2d..011a137cfcf 100644 --- a/docs/pre-release/developers/setting-up-metamask/index.html +++ b/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/docs/pre-release/intro/index.html b/docs/pre-release/intro/index.html index 74b13050745..221d93f6a8f 100644 --- a/docs/pre-release/intro/index.html +++ b/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/docs/pre-release/operators_and_staking/intro/index.html b/docs/pre-release/operators_and_staking/intro/index.html index 880b39693fe..0dd9e84ccfb 100644 --- a/docs/pre-release/operators_and_staking/intro/index.html +++ b/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/docs/pre-release/operators_and_staking/operators/index.html b/docs/pre-release/operators_and_staking/operators/index.html index c19b47a4e1b..5bc5e1314d7 100644 --- a/docs/pre-release/operators_and_staking/operators/index.html +++ b/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/docs/pre-release/operators_and_staking/staking/index.html b/docs/pre-release/operators_and_staking/staking/index.html index 8f53e5db760..769644ce2a3 100644 --- a/docs/pre-release/operators_and_staking/staking/index.html +++ b/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/docs/pre-release/protocol/common_problems/index.html b/docs/pre-release/protocol/common_problems/index.html index 6df08044f30..e0657ee2672 100644 --- a/docs/pre-release/protocol/common_problems/index.html +++ b/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/docs/pre-release/protocol/port-forwarding/index.html b/docs/pre-release/protocol/port-forwarding/index.html index a698bfeef83..ef5acb86586 100644 --- a/docs/pre-release/protocol/port-forwarding/index.html +++ b/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/docs/pre-release/protocol/pulsar/index.html b/docs/pre-release/protocol/pulsar/index.html index e6a79b0fd16..428347e5275 100644 --- a/docs/pre-release/protocol/pulsar/index.html +++ b/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/docs/pre-release/protocol/security/index.html b/docs/pre-release/protocol/security/index.html index 7a62e240cb4..c6f7defeb72 100644 --- a/docs/pre-release/protocol/security/index.html +++ b/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/docs/pre-release/protocol/substrate-cli/index.html b/docs/pre-release/protocol/substrate-cli/index.html index fb185ea4e57..b76238a7b3e 100644 --- a/docs/pre-release/protocol/substrate-cli/index.html +++ b/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/docs/pre-release/protocol/timekeeping/index.html b/docs/pre-release/protocol/timekeeping/index.html index 503c9f1ac98..84503c12b7d 100644 --- a/docs/pre-release/protocol/timekeeping/index.html +++ b/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/docs/pre-release/protocol/wallets/polkadot/index.html b/docs/pre-release/protocol/wallets/polkadot/index.html index f99001006ad..a58b0d721ce 100644 --- a/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/docs/pre-release/protocol/wallets/subwallet/index.html b/docs/pre-release/protocol/wallets/subwallet/index.html index 48ad863671c..cbe2fb35252 100644 --- a/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/docs/protocol/common_problems/index.html b/docs/protocol/common_problems/index.html index 64cfe68ee46..9603aa1bea6 100644 --- a/docs/protocol/common_problems/index.html +++ b/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/docs/protocol/port-forwarding/index.html b/docs/protocol/port-forwarding/index.html index 88c5da7c43c..0eb49185d00 100644 --- a/docs/protocol/port-forwarding/index.html +++ b/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/docs/protocol/pulsar/index.html b/docs/protocol/pulsar/index.html index 4c5753bb9da..88738e2458f 100644 --- a/docs/protocol/pulsar/index.html +++ b/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/docs/protocol/security/index.html b/docs/protocol/security/index.html index 8d3dfb97662..d0f3efb087e 100644 --- a/docs/protocol/security/index.html +++ b/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/docs/protocol/substrate-cli/index.html b/docs/protocol/substrate-cli/index.html index bb140568a25..3d2fa04e5ee 100644 --- a/docs/protocol/substrate-cli/index.html +++ b/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/docs/protocol/timekeeping/index.html b/docs/protocol/timekeeping/index.html index 4e4a5f17d44..306becf73ad 100644 --- a/docs/protocol/timekeeping/index.html +++ b/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/docs/protocol/wallets/polkadot/index.html b/docs/protocol/wallets/polkadot/index.html index 446fa660f35..a3f75462f92 100644 --- a/docs/protocol/wallets/polkadot/index.html +++ b/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/docs/protocol/wallets/subwallet/index.html b/docs/protocol/wallets/subwallet/index.html index 2c2275161ff..7d75c58031a 100644 --- a/docs/protocol/wallets/subwallet/index.html +++ b/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/es/404.html b/es/404.html index bbeb754f5dd..6584e2a68b4 100644 --- a/es/404.html +++ b/es/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/es/assets/js/a44fe27c.dad822d9.js b/es/assets/js/a44fe27c.cd86aacb.js similarity index 73% rename from es/assets/js/a44fe27c.dad822d9.js rename to es/assets/js/a44fe27c.cd86aacb.js index df0dd3c2866..c567659fb6a 100644 --- a/es/assets/js/a44fe27c.dad822d9.js +++ b/es/assets/js/a44fe27c.cd86aacb.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[6772],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/es/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/es/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/es/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/es/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/es/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[6772],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/es/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/es/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/es/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/es/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/es/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/es/assets/js/runtime~main.f4fd5dea.js b/es/assets/js/runtime~main.0d6bbb61.js similarity index 99% rename from es/assets/js/runtime~main.f4fd5dea.js rename to es/assets/js/runtime~main.0d6bbb61.js index 51ecb2e01b3..6a8b88c3a91 100644 --- a/es/assets/js/runtime~main.f4fd5dea.js +++ b/es/assets/js/runtime~main.0d6bbb61.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",206:"1d71820a",221:"a6a20443",316:"8444f44c",412:"badc4e19",541:"66631f85",562:"4f145f69",776:"504fd973",830:"7b48d430",996:"9c5c9f14",1001:"a8e01be4",1043:"4a50e0b1",1337:"355ddddb",1785:"bda5c66f",1829:"0538dc5c",1998:"fa847e5c",2002:"26440f2d",2339:"d2d09767",2610:"fd4832b4",2754:"2371fbc7",3011:"914f7525",3085:"1f391b9e",3095:"cb439446",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3748:"0a500f57",4071:"a9b37fce",4139:"d1f2b604",4317:"19b68e4c",4369:"fe9bbbbf",4495:"64e0fb39",4685:"359fb69f",4737:"0bf24984",4818:"4ae96daa",5124:"b5a7126c",5636:"1d7cc536",5843:"3a078b1a",6336:"2f6329d0",6376:"0267bf55",6384:"60d1412a",6772:"a44fe27c",6806:"7485d0ab",7106:"72cff01b",7126:"25feb8c5",7345:"8a29fe47",7370:"c09f4ff7",7414:"393be207",7546:"5ec983de",7639:"183b6efc",7875:"7d88afd4",7918:"17896441",7934:"47b3639c",7935:"632f4c17",7942:"03ee9f5c",8103:"2e281118",8180:"2012bc5e",8188:"0cf8502e",8454:"8e7ca607",8607:"793f973e",8824:"dca71162",8915:"df10c386",9040:"81063778",9076:"97ba5922",9200:"a3a50655",9227:"2d06f90b",9501:"aeaf0f2b",9514:"1be78505",9632:"41586f26",9817:"14eb3368",9828:"e0f58cdb",9945:"c2e86fa9"}[e]||e)+"."+{53:"80cb2913",206:"5ffacd29",221:"669f2a8c",316:"2e23fe64",412:"52ca3529",541:"8fa79d6d",562:"1cd5ad1b",776:"a27659e8",814:"dc8c3a26",830:"0d50f5e7",996:"00a2c06d",1001:"bd63f6f2",1043:"1babd942",1337:"f499abe9",1785:"a7f98aee",1829:"f5cf782f",1998:"084eb3df",2002:"2c90ff4a",2339:"e9d53edd",2610:"53bff9cf",2754:"532c71b0",3011:"a3a64935",3085:"3a447380",3095:"a6ff55ab",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3748:"64d35677",4071:"9b62c20a",4139:"78cea0fa",4317:"11db79aa",4369:"64545a87",4495:"5d797ee7",4685:"909d0b4b",4737:"ad1dffc3",4818:"1883dd6a",4972:"4a54fd4a",5124:"326100a8",5636:"f80d1423",5843:"ad0b7b81",6336:"06d0e34b",6376:"021d6c7c",6384:"1a175176",6772:"dad822d9",6806:"22b42624",7106:"dd629d0b",7126:"1b43b26d",7345:"9dd8eb07",7370:"aa13ec11",7414:"f1b1c72a",7546:"3df42da2",7639:"ee1dcd95",7875:"796e4934",7918:"e3da5265",7934:"55f43ee9",7935:"85f576a4",7942:"406f041d",8103:"e787dc37",8180:"5de7dcab",8188:"9b06ad6c",8454:"2d342d88",8607:"9ed4d09d",8824:"04949c53",8915:"a3909a93",9040:"814f5c61",9076:"0c18b01b",9200:"bc0a6dc0",9227:"d5798850",9501:"5f01b328",9514:"478c02c6",9632:"6e10500b",9817:"b7ea7ab7",9828:"eb4c2908",9945:"767114c2"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/es/",r.gca=function(e){return e={17896441:"7918",81063778:"9040","935f2afb":"53","1d71820a":"206",a6a20443:"221","8444f44c":"316",badc4e19:"412","66631f85":"541","4f145f69":"562","504fd973":"776","7b48d430":"830","9c5c9f14":"996",a8e01be4:"1001","4a50e0b1":"1043","355ddddb":"1337",bda5c66f:"1785","0538dc5c":"1829",fa847e5c:"1998","26440f2d":"2002",d2d09767:"2339",fd4832b4:"2610","2371fbc7":"2754","914f7525":"3011","1f391b9e":"3085",cb439446:"3095",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","0a500f57":"3748",a9b37fce:"4071",d1f2b604:"4139","19b68e4c":"4317",fe9bbbbf:"4369","64e0fb39":"4495","359fb69f":"4685","0bf24984":"4737","4ae96daa":"4818",b5a7126c:"5124","1d7cc536":"5636","3a078b1a":"5843","2f6329d0":"6336","0267bf55":"6376","60d1412a":"6384",a44fe27c:"6772","7485d0ab":"6806","72cff01b":"7106","25feb8c5":"7126","8a29fe47":"7345",c09f4ff7:"7370","393be207":"7414","5ec983de":"7546","183b6efc":"7639","7d88afd4":"7875","47b3639c":"7934","632f4c17":"7935","03ee9f5c":"7942","2e281118":"8103","2012bc5e":"8180","0cf8502e":"8188","8e7ca607":"8454","793f973e":"8607",dca71162:"8824",df10c386:"8915","97ba5922":"9076",a3a50655:"9200","2d06f90b":"9227",aeaf0f2b:"9501","1be78505":"9514","41586f26":"9632","14eb3368":"9817",e0f58cdb:"9828",c2e86fa9:"9945"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",206:"1d71820a",221:"a6a20443",316:"8444f44c",412:"badc4e19",541:"66631f85",562:"4f145f69",776:"504fd973",830:"7b48d430",996:"9c5c9f14",1001:"a8e01be4",1043:"4a50e0b1",1337:"355ddddb",1785:"bda5c66f",1829:"0538dc5c",1998:"fa847e5c",2002:"26440f2d",2339:"d2d09767",2610:"fd4832b4",2754:"2371fbc7",3011:"914f7525",3085:"1f391b9e",3095:"cb439446",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3748:"0a500f57",4071:"a9b37fce",4139:"d1f2b604",4317:"19b68e4c",4369:"fe9bbbbf",4495:"64e0fb39",4685:"359fb69f",4737:"0bf24984",4818:"4ae96daa",5124:"b5a7126c",5636:"1d7cc536",5843:"3a078b1a",6336:"2f6329d0",6376:"0267bf55",6384:"60d1412a",6772:"a44fe27c",6806:"7485d0ab",7106:"72cff01b",7126:"25feb8c5",7345:"8a29fe47",7370:"c09f4ff7",7414:"393be207",7546:"5ec983de",7639:"183b6efc",7875:"7d88afd4",7918:"17896441",7934:"47b3639c",7935:"632f4c17",7942:"03ee9f5c",8103:"2e281118",8180:"2012bc5e",8188:"0cf8502e",8454:"8e7ca607",8607:"793f973e",8824:"dca71162",8915:"df10c386",9040:"81063778",9076:"97ba5922",9200:"a3a50655",9227:"2d06f90b",9501:"aeaf0f2b",9514:"1be78505",9632:"41586f26",9817:"14eb3368",9828:"e0f58cdb",9945:"c2e86fa9"}[e]||e)+"."+{53:"80cb2913",206:"5ffacd29",221:"669f2a8c",316:"2e23fe64",412:"52ca3529",541:"8fa79d6d",562:"1cd5ad1b",776:"a27659e8",814:"dc8c3a26",830:"0d50f5e7",996:"00a2c06d",1001:"bd63f6f2",1043:"1babd942",1337:"f499abe9",1785:"a7f98aee",1829:"f5cf782f",1998:"084eb3df",2002:"2c90ff4a",2339:"e9d53edd",2610:"53bff9cf",2754:"532c71b0",3011:"a3a64935",3085:"3a447380",3095:"a6ff55ab",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3748:"64d35677",4071:"9b62c20a",4139:"78cea0fa",4317:"11db79aa",4369:"64545a87",4495:"5d797ee7",4685:"909d0b4b",4737:"ad1dffc3",4818:"1883dd6a",4972:"4a54fd4a",5124:"326100a8",5636:"f80d1423",5843:"ad0b7b81",6336:"06d0e34b",6376:"021d6c7c",6384:"1a175176",6772:"cd86aacb",6806:"22b42624",7106:"dd629d0b",7126:"1b43b26d",7345:"9dd8eb07",7370:"aa13ec11",7414:"f1b1c72a",7546:"3df42da2",7639:"ee1dcd95",7875:"796e4934",7918:"e3da5265",7934:"55f43ee9",7935:"85f576a4",7942:"406f041d",8103:"e787dc37",8180:"5de7dcab",8188:"9b06ad6c",8454:"2d342d88",8607:"9ed4d09d",8824:"04949c53",8915:"a3909a93",9040:"814f5c61",9076:"0c18b01b",9200:"bc0a6dc0",9227:"d5798850",9501:"5f01b328",9514:"478c02c6",9632:"6e10500b",9817:"b7ea7ab7",9828:"eb4c2908",9945:"767114c2"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/es/",r.gca=function(e){return e={17896441:"7918",81063778:"9040","935f2afb":"53","1d71820a":"206",a6a20443:"221","8444f44c":"316",badc4e19:"412","66631f85":"541","4f145f69":"562","504fd973":"776","7b48d430":"830","9c5c9f14":"996",a8e01be4:"1001","4a50e0b1":"1043","355ddddb":"1337",bda5c66f:"1785","0538dc5c":"1829",fa847e5c:"1998","26440f2d":"2002",d2d09767:"2339",fd4832b4:"2610","2371fbc7":"2754","914f7525":"3011","1f391b9e":"3085",cb439446:"3095",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","0a500f57":"3748",a9b37fce:"4071",d1f2b604:"4139","19b68e4c":"4317",fe9bbbbf:"4369","64e0fb39":"4495","359fb69f":"4685","0bf24984":"4737","4ae96daa":"4818",b5a7126c:"5124","1d7cc536":"5636","3a078b1a":"5843","2f6329d0":"6336","0267bf55":"6376","60d1412a":"6384",a44fe27c:"6772","7485d0ab":"6806","72cff01b":"7106","25feb8c5":"7126","8a29fe47":"7345",c09f4ff7:"7370","393be207":"7414","5ec983de":"7546","183b6efc":"7639","7d88afd4":"7875","47b3639c":"7934","632f4c17":"7935","03ee9f5c":"7942","2e281118":"8103","2012bc5e":"8180","0cf8502e":"8188","8e7ca607":"8454","793f973e":"8607",dca71162:"8824",df10c386:"8915","97ba5922":"9076",a3a50655:"9200","2d06f90b":"9227",aeaf0f2b:"9501","1be78505":"9514","41586f26":"9632","14eb3368":"9817",e0f58cdb:"9828",c2e86fa9:"9945"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n - + - + \ No newline at end of file diff --git a/es/docs/category/developer-documentation/index.html b/es/docs/category/developer-documentation/index.html index e65c9714663..478523f6122 100644 --- a/es/docs/category/developer-documentation/index.html +++ b/es/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/es/docs/category/get-started-with-farming/index.html b/es/docs/category/get-started-with-farming/index.html index 3dd1f7d1bd9..ea84e2e1bfb 100644 --- a/es/docs/category/get-started-with-farming/index.html +++ b/es/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/es/docs/category/operators-and-staking/index.html b/es/docs/category/operators-and-staking/index.html index bc9dc6390af..34d2f620451 100644 --- a/es/docs/category/operators-and-staking/index.html +++ b/es/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/es/docs/category/wallets/index.html b/es/docs/category/wallets/index.html index 099fb8fa78f..9171693b698 100644 --- a/es/docs/category/wallets/index.html +++ b/es/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/es/docs/community/CODE_OF_CONDUCT/index.html b/es/docs/community/CODE_OF_CONDUCT/index.html index c6eb7e80ebe..dacf699c798 100644 --- a/es/docs/community/CODE_OF_CONDUCT/index.html +++ b/es/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Código de conducta del Pacto de Colaboradores

    Nuestro Compromiso

    Nosotros, como miembros, colaboradores y líderes, nos comprometemos a hacer de la participación en nuestra comunidad una experiencia libre de acoso para todos, independientemente de su edad, tamaño discapacidad visible o invisible, origen étnico, características sexuales, identidad y expresión de género, nivel de experiencia, educación, estatus socioeconómico, nacionalidad, apariencia personal, raza, casta, color, religión, identidad sexual u orientación.

    Nos comprometemos a actuar e interactuar de forma que contribuya a una comunidad abierta, acogedora, diversa, inclusiva y saludable.

    Nuestros estándares

    Ejemplos de comportamiento que contribuyen a un ambiente positivo para nuestra comunidad incluyen:

    • Demostrar empatía y amabilidad hacia otras personas
    • Ser respetuoso de puntos de vista y experiencias diferentes
    • Dar y aceptar agradecidamente comentarios constructivos
    • Aceptar la responsabilidad y pedir disculpas a los afectados por nuestros errores, y aprender de la experiencia
    • Centrarse en lo que es mejor no solo para nosotros individualmente, sino para la comunidad en general

    Ejemplos de comportamiento inaceptable de los participantes incluyen:

    • El uso de lenguaje o imágenes de contenido sexual, interés o insinuaciones sexuales de cualquier clase
    • Trollear, insultar o comentarios despectivos y ataques personales o políticos
    • Acoso público o privado
    • Publicar información privada de otras personas, incluyendo dirección física o electrónica, sin permiso explícito
    • Otra conducta que pueda ser considerada inapropiada en un entorno profesional

    Responsibilidades

    Los líderes de la Comunidad son responsables de aclarar y hacer cumplir nuestros estándares de comportamiento aceptable y tomarán medidas correctivas adecuadas y justas en respuesta a cualquier comportamiento que consideren inapropiado, amenazante, ofensivo o perjudicial.

    Los líderes del proyecto tienen el derecho y responsabilidad de eliminar, editar o rechazar comentarios, commits, código, ediciones de wiki, issues y otras contribuciones que no estén alineados a este código de conducta, o expulsar temporalmente o permanentemente cualquier contribuyente por otros comportamientos que consideren inapropiados, amenazante, ofensivo o dañino.

    Scope

    Este Código de Conducta se aplica en todos los espacios comunitarios, y también se aplica cuando un individuo representa oficialmente a la comunidad en espacios públicos. Ejemplos de representar a nuestra comunidad incluyen el uso de una dirección de correo electrónico oficial, publicar a través de una cuenta oficial de redes sociales, o actuar como representante designado en un evento en línea o fuera de línea.

    Cumplimiento

    Las instancias de comportamiento abusivo, acoso o inaceptable pueden ser denunciadas a los líderes de la comunidad responsables de la aplicación en [INSERT CONTACT METHOD]. Todas las quejas serán revisadas e investigadas de forma rápida y justa.

    Todos los líderes de la comunidad están obligados a respetar la privacidad y seguridad de la persona que reporte cualquier incidente.

    Directrices de aplicación

    Los líderes de la Comunidad seguirán estas Directrices de Orden Comunitario para determinar las consecuencias de cualquier acción que consideren en violación de este Código de Conducta:

    1. Corrección

    Impacto en la comunidad: Uso de un lenguaje inapropiado u otro comportamiento considerado poco profesional o no bienvenido en la comunidad.

    Consecuencia: Una advertencia escrita por privado de los líderes de la comunidad, proporcionando claridad acerca de la naturaleza de la infracción y una explicación de por qué el comportamiento fue inapropiado. Se puede solicitar una disculpa pública.

    2. Advertencia

    Impacto en la comunidad: Una infracción a través de un solo incidente o serie de acciones.

    Consecuencia: Una advertencia con consecuencias para el comportamiento continuo. Ninguna interacción con las personas involucradas, incluyendo la no interacción con aquellas personas que han aplicado el Código de Conducta, durante un período de tiempo determinado. Esto incluye evitar interacciones tanto en espacios comunitarios como en canales externos como en medios sociales. La violación de estos términos puede llevar a una prohibición temporal o permanente.

    3. Expulsión Temporal

    Impacto en la comunidad: Una violación grave de los estándares de la comunidad, incluyendo comportamiento inapropiado sostenido.

    Consecuencia: Una prohibición temporal de cualquier tipo de interacción o comunicación pública con la comunidad durante un periodo de tiempo determinado. No habrá ninguna interacción, ni pública ni privada, con las personas involucradas, incluyendo la no interacción con aquellas personas que han aplicado el Código de Conducta, durante un período de tiempo determinado. La violación de estos términos puede llevar a una prohibición temporal o permanente.

    4. Ban permanente

    Impacto en la comunidad: Demostrar un patrón de violación de los estándares de la comunidad incluyendo comportamiento inapropiado sostenido, acoso o agresión hacia un individuo, o desprecio de clases de individuos.

    Consecuencia: prohibición permanente de cualquier tipo de interacción pública dentro de la comunidad.

    Atribución

    Este Código de Conducta es una adaptación del Pacto de Colaboradores, versión 2.1, disponible en https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Las directrices de impacto en la comunidad se inspiraron en el código de conducta de Mozilla.

    Para respuestas a preguntas comunes sobre este código de conducta, consulta las preguntas frecuentes en https://www.contributor-covenant.org/faq. Las traducciones están disponibles en https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/es/docs/community/contribute/index.html b/es/docs/community/contribute/index.html index 90be5bfea35..57951cf073b 100644 --- a/es/docs/community/contribute/index.html +++ b/es/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    ¿Cómo contribuir?

    ¡Eres lo máximo!

    En primer lugar, gracias por considerar contribuir a Subspace Network. Es a través de la asombrosa colaboración de personas como usted que realmente hace que la comunidad de código abierto sea asombrosa. ❤️

    Ayúdanos a ayudarte, ¡Ayúdanos!

    Siguiendo estas pautas muestra que respetas el tiempo de los desarrolladores que administran y desarrollan este proyecto de código abierto. A cambio, deben recetar ese respeto abordando su problema, evaluando los cambios y ayudándole a finalizar sus solicitudes de extracción.

    ¿Qué puedo contribuir?

    Somos un proyecto completamente de código abierto, lo que significa que estamos abiertos a todo tipo de contribuciones de nuestra comunidad. Aquí hay algunos ejemplos de contribuciones a las que estamos abiertos:

    • Contenido añadido: ¿Escribiendo una buena guía? Envíalo en las guías del foro.
    • Informes de errores y soluciones: ¿Has encontrado un error? Háganos saber dónde se esconde. Denúncialo en el foro de soporte.
    • Solicitudes de Característica & Implementaciones: ¿Buscando una nueva característica? Comparte tus ideas para que podamos mejorar.

    Si tienes algo que no aparece en la lista, intenta ser lo más descriptivo posible y siéntete libre de enviar la pull request.

    Reglas de juego

    Por favor, consulte nuestro Código de Conducta.

    Tu primera contribución

    Arreglo simple

    Por favor, siga esta vía para aportaciones menores como errores ortográficos, erratas, reformulación, etc.

    Si está agregando páginas completamente nuevas, características, etc, entonces consulte la porción Avanzada de esta sección.

    1. Ve a Documentación de Subspacey encuentra la página que te gustaría cambiar.
    2. Desplácese hasta la parte inferior y haga clic en Editar esta página.
    3. Esto abrirá GitHub, y lo dirigirá a la página principal de GitHub.
    4. En la parte superior derecha haz clic en el emoji lápiz para editar la página.
    5. GitHub cambiará la página a un editor de texto, donde podrá realizar cambios.
    6. Una vez que esté satisfecho con sus cambios, desplácese hasta la parte inferior y rellene los siguientes campos.
      • Rellena el título
      • Introduzca la descripción
      • Haga clic en Crear una nueva rama para este commit e iniciar una pull request. opción
    7. Haga clic en Proponer cambios
    8. A la derecha verás algunas opciones, querrás aplicar las etiquetas más precisas listadas.
    9. Haga clic en Crear Pull Request

    🎉¡Felicidades! ¡Acabas de enviar tu primera solicitud de extracción! Por favor proporciona un tiempo para que un mantenedor vea tu pull request y lo apruebe o solicite ajustes.

    ¿Nunca has contribuido antes?

    ¡No te preocupes! Todos empezamos en algún lugar 🚀 Hay varios videos y recursos en línea para mostrar varias maneras de usar GitHub. Echa un vistazo a algunas de estas guías increíbles para ayudarte a familiarizarte con GitHub y contribuir.

    Arreglo avanzado

    Esta sección presupone una mejor comprensión de GitHub, y de los conceptos básicos de programación.

    Para arreglos más grandes y más avanzados, por favor asegúrese de seguir los principios básicos a continuación.

    • No no comente código trivial simple como importar componentes existentes, y HTML/CSS básico.
    • Haga comentarios sobre el código no trivial complejo, la lógica compleja debería ser fácil de entender.
    • Todas las funciones públicas deben ser comentadas.
    • Si el código es trivial pero puede ser olvidado con el tiempo, por favor comente.
    • Intenta pensar en tu código desde una vista de tercera persona. debería tener sentido para cualquier persona con un fondo similar en la tecnología que está utilizando.
    • A veces es difícil de entender el código necesita refactorizar en lugar de más comentarios.
    • Asegúrese de que el programa todavía puede construir antes de pull request.

    Para las correcciones avanzadas debes seguir la vía general de GitHub.

    1. Crea tu propio fork del código. Fork
    2. Haga los cambios localmente en su sistema en su entorno de desarrollo preferido.
    3. Siguiendo el README. instrucciones, prueba tus cambios localmente con yarn build y yarn run serve o npm build y npm run serve para asegurar que no haya problemas claros.
    4. Empuja los cambios a tu bifurcación y envía un pull request comparando entre bifurcaciones. Enviar Pull Request

    Cómo reportar un error o error

    No tenemos ninguna plantilla estricta que usted debe seguir, pero por favor proporcione toda la información requerida para que podamos resolver rápidamente cualquier problema.

    • Si encuentra un error de programación real, por favor envíe un problema de GitHub y utilice la etiqueta bug.
    • Si encuentra un error gramásico/orto/contenido, por favor envíe un problema de GitHub y utilice la etiqueta documentación.

    Cómo sugerir una característica o mejora

    Esta documentación es para la comunidad, por lo que cualquier petición de característica es bienvenida.

    • Si estás solicitando una función, por favor envía un problema de GitHub y usa la etiqueta mejora.
    • Explique por qué es necesario este problema y qué problemas resolverá.
    • Indique si está capacitado o dispuesto a ayudar a implementar esta función.

    Proceso de revisión de código

    • El equipo central echará un vistazo a cualquier pull request tan pronto como sea posible, generalmente puede esperar una respuesta dentro de uno o dos días.
    • Si se trata de una solución simple y no polémica, revisaremos el código y aprobaremos.
    • Si hay preguntas, comentarios, o más discusión debe ser si nos comunicamos con el colaborador de la Pull Request para intentar resolver dichos problemas.
    • Si no hay respuesta o actividad dentro de las dos semanas siguientes a la respuesta del equipo, podemos cerrar la solicitud de extracción.

    Comunidad

    Puedes chatear con el equipo central en Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/es/docs/community/index.html b/es/docs/community/index.html index f398f192cd7..f0b6602c802 100644 --- a/es/docs/community/index.html +++ b/es/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Increíble Subspace

    :::precaución

    Tenga en cuenta que todos los recursos proporcionados por la comunidad son no oficiales. For clarification please refer to official materials.

    :::

    Grupos comunitarios


    Telegram

    :Turquía: - telegram tu-rk toplulugu-

    Reddit

    🇺🇸 - Comunidad de Subreddit en inglés

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 中国不和谐社区

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - русское дискорд-сообщество

    Traducciones de la comunidad

    Whitepaper

    Articulos

    Información

    Preguntas Más Frecuentes

    Comenzando la agricultura

    Medium

    Guía de inicio

    Traer el consenso de PoC a Substrate

    Subspace es el primer protocolo para resolver completamente el trilema del blockchain sin compromiso. proporcionado por solgas

    Eventos

    1er AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/es/docs/community/translate/index.html b/es/docs/community/translate/index.html index fe9ed9854a6..9c3900b720c 100644 --- a/es/docs/community/translate/index.html +++ b/es/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Guía de traducción

    Guía de traducción

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Requisitos previos

    Lineamientos

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Asegúrate de seguir nuestro Contribuyendo Estándares y nuestro Código de Conducta.

    Cómo hacer

    A continuación encontrará el itinerario sobre cómo proporcionar traducciones para la red de subspace a través del portal de traducción de Crowdin.

    1. Visita el respectivo portal de traducción para el que quieres ayudar a traducir (Ver arriba)

      traducir-paso-1

    2. Una vez que haya iniciado sesión y se haya unido al proyecto, se le llevará al panel de control del proyecto, seleccione el idioma que desea traducir. Ver a continuación

      traducir-paso-2

    3. Se encontrará en una pantalla con todos los archivos fuente listados, seleccione Translate All en la parte superior derecha (Ver abajo)

      traducir-paso-3

    4. Luego se te introducirá en el Portal de Traducción, en este portal encontrarás lo siguiente

      1. Versión en inglés del texto
      2. Marcar para introducir la traducción del idioma del texto en blanco
      3. Sugerencias automatizadas para el texto
      4. Lista de palabras que necesita traducir
      5. Un lugar para comentarios si algo necesita aclaración

      traducir-paso-4

    5. Desde aquí completarás tus traducciones como quieras y finalizarás una vez hayas terminado.

    6. Su traducción será revisada y aprobada en el momento oportuno. tenga en cuenta que las traducciones pueden tardar un par de días antes de que se llenen en la documentación desplegada.

    - + \ No newline at end of file diff --git a/es/docs/developers/block_explorer/index.html b/es/docs/developers/block_explorer/index.html index 4947b17d9a3..4b50902cabc 100644 --- a/es/docs/developers/block_explorer/index.html +++ b/es/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/es/docs/developers/faucet/index.html b/es/docs/developers/faucet/index.html index 577fe852b95..4c7438a13c2 100644 --- a/es/docs/developers/faucet/index.html +++ b/es/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/es/docs/developers/foundry_guide/index.html b/es/docs/developers/foundry_guide/index.html index 567a426cba2..f4db2516811 100644 --- a/es/docs/developers/foundry_guide/index.html +++ b/es/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/es/docs/developers/general-information/index.html b/es/docs/developers/general-information/index.html index f9cf7584036..b9c8a0f58db 100644 --- a/es/docs/developers/general-information/index.html +++ b/es/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/es/docs/developers/hardhat_guide/index.html b/es/docs/developers/hardhat_guide/index.html index f02ac609968..22a6d28afa2 100644 --- a/es/docs/developers/hardhat_guide/index.html +++ b/es/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/es/docs/developers/intro/index.html b/es/docs/developers/intro/index.html index df4fe9ece67..fcee49720ee 100644 --- a/es/docs/developers/intro/index.html +++ b/es/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/es/docs/developers/local_development/index.html b/es/docs/developers/local_development/index.html index 8906ec6fecf..360193f1cbf 100644 --- a/es/docs/developers/local_development/index.html +++ b/es/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/es/docs/developers/quick_start/index.html b/es/docs/developers/quick_start/index.html index 3e24a2f939b..54b9f2b4c42 100644 --- a/es/docs/developers/quick_start/index.html +++ b/es/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/es/docs/developers/remix_guide/index.html b/es/docs/developers/remix_guide/index.html index db06160dda4..83f6f33e58b 100644 --- a/es/docs/developers/remix_guide/index.html +++ b/es/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/es/docs/developers/setting-up-metamask/index.html b/es/docs/developers/setting-up-metamask/index.html index 66e657fcc7b..0130282789f 100644 --- a/es/docs/developers/setting-up-metamask/index.html +++ b/es/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/es/docs/intro/index.html b/es/docs/intro/index.html index 8a250459dab..04c371cd5b8 100644 --- a/es/docs/intro/index.html +++ b/es/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/es/docs/operators_and_staking/intro/index.html b/es/docs/operators_and_staking/intro/index.html index 044489f75c2..2004774593c 100644 --- a/es/docs/operators_and_staking/intro/index.html +++ b/es/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/es/docs/operators_and_staking/operators/index.html b/es/docs/operators_and_staking/operators/index.html index 9daa65c2489..dfef82182a8 100644 --- a/es/docs/operators_and_staking/operators/index.html +++ b/es/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/es/docs/operators_and_staking/staking/index.html b/es/docs/operators_and_staking/staking/index.html index 0c0e43ac36b..f9e0fc55d5f 100644 --- a/es/docs/operators_and_staking/staking/index.html +++ b/es/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/es/docs/pre-release/category/community/index.html b/es/docs/pre-release/category/community/index.html index c0adf68ae07..1a432611f27 100644 --- a/es/docs/pre-release/category/community/index.html +++ b/es/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/es/docs/pre-release/category/developer-documentation/index.html b/es/docs/pre-release/category/developer-documentation/index.html index 81afb296525..ec1844fceeb 100644 --- a/es/docs/pre-release/category/developer-documentation/index.html +++ b/es/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/es/docs/pre-release/category/get-started-with-farming/index.html b/es/docs/pre-release/category/get-started-with-farming/index.html index 7376c6c8fb7..0db5bc780fa 100644 --- a/es/docs/pre-release/category/get-started-with-farming/index.html +++ b/es/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/es/docs/pre-release/category/operators-and-staking/index.html b/es/docs/pre-release/category/operators-and-staking/index.html index b841dd0d465..4688a9ea39b 100644 --- a/es/docs/pre-release/category/operators-and-staking/index.html +++ b/es/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/es/docs/pre-release/category/wallets/index.html b/es/docs/pre-release/category/wallets/index.html index a970d58d0e6..e6b2d3cb241 100644 --- a/es/docs/pre-release/category/wallets/index.html +++ b/es/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/es/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/es/docs/pre-release/community/CODE_OF_CONDUCT/index.html index fd2922a1320..b70eecc8cca 100644 --- a/es/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/es/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Código de conducta del Pacto de Colaboradores

    Nuestro Compromiso

    Nosotros, como miembros, colaboradores y líderes, nos comprometemos a hacer de la participación en nuestra comunidad una experiencia libre de acoso para todos, independientemente de su edad, tamaño discapacidad visible o invisible, origen étnico, características sexuales, identidad y expresión de género, nivel de experiencia, educación, estatus socioeconómico, nacionalidad, apariencia personal, raza, casta, color, religión, identidad sexual u orientación.

    Nos comprometemos a actuar e interactuar de forma que contribuya a una comunidad abierta, acogedora, diversa, inclusiva y saludable.

    Nuestros estándares

    Ejemplos de comportamiento que contribuyen a un ambiente positivo para nuestra comunidad incluyen:

    • Demostrar empatía y amabilidad hacia otras personas
    • Ser respetuoso de puntos de vista y experiencias diferentes
    • Dar y aceptar agradecidamente comentarios constructivos
    • Aceptar la responsabilidad y pedir disculpas a los afectados por nuestros errores, y aprender de la experiencia
    • Centrarse en lo que es mejor no solo para nosotros individualmente, sino para la comunidad en general

    Ejemplos de comportamiento inaceptable de los participantes incluyen:

    • El uso de lenguaje o imágenes de contenido sexual, interés o insinuaciones sexuales de cualquier clase
    • Trollear, insultar o comentarios despectivos y ataques personales o políticos
    • Acoso público o privado
    • Publicar información privada de otras personas, incluyendo dirección física o electrónica, sin permiso explícito
    • Otra conducta que pueda ser considerada inapropiada en un entorno profesional

    Responsibilidades

    Los líderes de la Comunidad son responsables de aclarar y hacer cumplir nuestros estándares de comportamiento aceptable y tomarán medidas correctivas adecuadas y justas en respuesta a cualquier comportamiento que consideren inapropiado, amenazante, ofensivo o perjudicial.

    Los líderes del proyecto tienen el derecho y responsabilidad de eliminar, editar o rechazar comentarios, commits, código, ediciones de wiki, issues y otras contribuciones que no estén alineados a este código de conducta, o expulsar temporalmente o permanentemente cualquier contribuyente por otros comportamientos que consideren inapropiados, amenazante, ofensivo o dañino.

    Scope

    Este Código de Conducta se aplica en todos los espacios comunitarios, y también se aplica cuando un individuo representa oficialmente a la comunidad en espacios públicos. Ejemplos de representar a nuestra comunidad incluyen el uso de una dirección de correo electrónico oficial, publicar a través de una cuenta oficial de redes sociales, o actuar como representante designado en un evento en línea o fuera de línea.

    Cumplimiento

    Las instancias de comportamiento abusivo, acoso o inaceptable pueden ser denunciadas a los líderes de la comunidad responsables de la aplicación en [INSERT CONTACT METHOD]. Todas las quejas serán revisadas e investigadas de forma rápida y justa.

    Todos los líderes de la comunidad están obligados a respetar la privacidad y seguridad de la persona que reporte cualquier incidente.

    Directrices de aplicación

    Los líderes de la Comunidad seguirán estas Directrices de Orden Comunitario para determinar las consecuencias de cualquier acción que consideren en violación de este Código de Conducta:

    1. Corrección

    Impacto en la comunidad: Uso de un lenguaje inapropiado u otro comportamiento considerado poco profesional o no bienvenido en la comunidad.

    Consecuencia: Una advertencia escrita por privado de los líderes de la comunidad, proporcionando claridad acerca de la naturaleza de la infracción y una explicación de por qué el comportamiento fue inapropiado. Se puede solicitar una disculpa pública.

    2. Advertencia

    Impacto en la comunidad: Una infracción a través de un solo incidente o serie de acciones.

    Consecuencia: Una advertencia con consecuencias para el comportamiento continuo. Ninguna interacción con las personas involucradas, incluyendo la no interacción con aquellas personas que han aplicado el Código de Conducta, durante un período de tiempo determinado. Esto incluye evitar interacciones tanto en espacios comunitarios como en canales externos como en medios sociales. La violación de estos términos puede llevar a una prohibición temporal o permanente.

    3. Expulsión Temporal

    Impacto en la comunidad: Una violación grave de los estándares de la comunidad, incluyendo comportamiento inapropiado sostenido.

    Consecuencia: Una prohibición temporal de cualquier tipo de interacción o comunicación pública con la comunidad durante un periodo de tiempo determinado. No habrá ninguna interacción, ni pública ni privada, con las personas involucradas, incluyendo la no interacción con aquellas personas que han aplicado el Código de Conducta, durante un período de tiempo determinado. La violación de estos términos puede llevar a una prohibición temporal o permanente.

    4. Ban permanente

    Impacto en la comunidad: Demostrar un patrón de violación de los estándares de la comunidad incluyendo comportamiento inapropiado sostenido, acoso o agresión hacia un individuo, o desprecio de clases de individuos.

    Consecuencia: prohibición permanente de cualquier tipo de interacción pública dentro de la comunidad.

    Atribución

    Este Código de Conducta es una adaptación del Pacto de Colaboradores, versión 2.1, disponible en https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Las directrices de impacto en la comunidad se inspiraron en el código de conducta de Mozilla.

    Para respuestas a preguntas comunes sobre este código de conducta, consulta las preguntas frecuentes en https://www.contributor-covenant.org/faq. Las traducciones están disponibles en https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/es/docs/pre-release/community/contribute/index.html b/es/docs/pre-release/community/contribute/index.html index 870538d5e6c..a1a52fe99ca 100644 --- a/es/docs/pre-release/community/contribute/index.html +++ b/es/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    ¿Cómo contribuir?

    ¡Eres lo máximo!

    En primer lugar, gracias por considerar contribuir a Subspace Network. Es a través de la asombrosa colaboración de personas como usted que realmente hace que la comunidad de código abierto sea asombrosa. ❤️

    Ayúdanos a ayudarte, ¡Ayúdanos!

    Siguiendo estas pautas muestra que respetas el tiempo de los desarrolladores que administran y desarrollan este proyecto de código abierto. A cambio, deben recetar ese respeto abordando su problema, evaluando los cambios y ayudándole a finalizar sus solicitudes de extracción.

    ¿Qué puedo contribuir?

    Somos un proyecto completamente de código abierto, lo que significa que estamos abiertos a todo tipo de contribuciones de nuestra comunidad. Aquí hay algunos ejemplos de contribuciones a las que estamos abiertos:

    • Contenido añadido: ¿Escribiendo una buena guía? Envíalo en las guías del foro.
    • Informes de errores y soluciones: ¿Has encontrado un error? Háganos saber dónde se esconde. Denúncialo en el foro de soporte.
    • Solicitudes de Característica & Implementaciones: ¿Buscando una nueva característica? Comparte tus ideas para que podamos mejorar.

    Si tienes algo que no aparece en la lista, intenta ser lo más descriptivo posible y siéntete libre de enviar la pull request.

    Reglas de juego

    Por favor, consulte nuestro Código de Conducta.

    Tu primera contribución

    Arreglo simple

    Por favor, siga esta vía para aportaciones menores como errores ortográficos, erratas, reformulación, etc.

    Si está agregando páginas completamente nuevas, características, etc, entonces consulte la porción Avanzada de esta sección.

    1. Ve a Documentación de Subspacey encuentra la página que te gustaría cambiar.
    2. Desplácese hasta la parte inferior y haga clic en Editar esta página.
    3. Esto abrirá GitHub, y lo dirigirá a la página principal de GitHub.
    4. En la parte superior derecha haz clic en el emoji lápiz para editar la página.
    5. GitHub cambiará la página a un editor de texto, donde podrá realizar cambios.
    6. Una vez que esté satisfecho con sus cambios, desplácese hasta la parte inferior y rellene los siguientes campos.
      • Rellena el título
      • Introduzca la descripción
      • Haga clic en Crear una nueva rama para este commit e iniciar una pull request. opción
    7. Haga clic en Proponer cambios
    8. A la derecha verás algunas opciones, querrás aplicar las etiquetas más precisas listadas.
    9. Haga clic en Crear Pull Request

    🎉¡Felicidades! ¡Acabas de enviar tu primera solicitud de extracción! Por favor proporciona un tiempo para que un mantenedor vea tu pull request y lo apruebe o solicite ajustes.

    ¿Nunca has contribuido antes?

    ¡No te preocupes! Todos empezamos en algún lugar 🚀 Hay varios videos y recursos en línea para mostrar varias maneras de usar GitHub. Echa un vistazo a algunas de estas guías increíbles para ayudarte a familiarizarte con GitHub y contribuir.

    Arreglo avanzado

    Esta sección presupone una mejor comprensión de GitHub, y de los conceptos básicos de programación.

    Para arreglos más grandes y más avanzados, por favor asegúrese de seguir los principios básicos a continuación.

    • No no comente código trivial simple como importar componentes existentes, y HTML/CSS básico.
    • Haga comentarios sobre el código no trivial complejo, la lógica compleja debería ser fácil de entender.
    • Todas las funciones públicas deben ser comentadas.
    • Si el código es trivial pero puede ser olvidado con el tiempo, por favor comente.
    • Intenta pensar en tu código desde una vista de tercera persona. debería tener sentido para cualquier persona con un fondo similar en la tecnología que está utilizando.
    • A veces es difícil de entender el código necesita refactorizar en lugar de más comentarios.
    • Asegúrese de que el programa todavía puede construir antes de pull request.

    Para las correcciones avanzadas debes seguir la vía general de GitHub.

    1. Crea tu propio fork del código. Fork
    2. Haga los cambios localmente en su sistema en su entorno de desarrollo preferido.
    3. Siguiendo el README. instrucciones, prueba tus cambios localmente con yarn build y yarn run serve o npm build y npm run serve para asegurar que no haya problemas claros.
    4. Empuja los cambios a tu bifurcación y envía un pull request comparando entre bifurcaciones. Enviar Pull Request

    Cómo reportar un error o error

    No tenemos ninguna plantilla estricta que usted debe seguir, pero por favor proporcione toda la información requerida para que podamos resolver rápidamente cualquier problema.

    • Si encuentra un error de programación real, por favor envíe un problema de GitHub y utilice la etiqueta bug.
    • Si encuentra un error gramásico/orto/contenido, por favor envíe un problema de GitHub y utilice la etiqueta documentación.

    Cómo sugerir una característica o mejora

    Esta documentación es para la comunidad, por lo que cualquier petición de característica es bienvenida.

    • Si estás solicitando una función, por favor envía un problema de GitHub y usa la etiqueta mejora.
    • Explique por qué es necesario este problema y qué problemas resolverá.
    • Indique si está capacitado o dispuesto a ayudar a implementar esta función.

    Proceso de revisión de código

    • El equipo central echará un vistazo a cualquier pull request tan pronto como sea posible, generalmente puede esperar una respuesta dentro de uno o dos días.
    • Si se trata de una solución simple y no polémica, revisaremos el código y aprobaremos.
    • Si hay preguntas, comentarios, o más discusión debe ser si nos comunicamos con el colaborador de la Pull Request para intentar resolver dichos problemas.
    • Si no hay respuesta o actividad dentro de las dos semanas siguientes a la respuesta del equipo, podemos cerrar la solicitud de extracción.

    Comunidad

    Puedes chatear con el equipo central en Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/es/docs/pre-release/community/index.html b/es/docs/pre-release/community/index.html index 53b3ec559a8..8ef7baba359 100644 --- a/es/docs/pre-release/community/index.html +++ b/es/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Increíble Subspace

    :::precaución

    Tenga en cuenta que todos los recursos proporcionados por la comunidad son no oficiales. For clarification please refer to official materials.

    :::

    Grupos comunitarios


    Telegram

    :Turquía: - telegram tu-rk toplulugu-

    Reddit

    🇺🇸 - Comunidad de Subreddit en inglés

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 中国不和谐社区

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - русское дискорд-сообщество

    Traducciones de la comunidad

    Whitepaper

    Articulos

    Información

    Preguntas Más Frecuentes

    Comenzando la agricultura

    Medium

    Guía de inicio

    Traer el consenso de PoC a Substrate

    Subspace es el primer protocolo para resolver completamente el trilema del blockchain sin compromiso. proporcionado por solgas

    Eventos

    1er AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/es/docs/pre-release/community/translate/index.html b/es/docs/pre-release/community/translate/index.html index 07f479a8e30..7798b976d8e 100644 --- a/es/docs/pre-release/community/translate/index.html +++ b/es/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Guía de traducción

    Guía de traducción

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Requisitos previos

    Lineamientos

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Asegúrate de seguir nuestro Contribuyendo Estándares y nuestro Código de Conducta.

    Cómo hacer

    A continuación encontrará el itinerario sobre cómo proporcionar traducciones para la red de subspace a través del portal de traducción de Crowdin.

    1. Visita el respectivo portal de traducción para el que quieres ayudar a traducir (Ver arriba)

      traducir-paso-1

    2. Una vez que haya iniciado sesión y se haya unido al proyecto, se le llevará al panel de control del proyecto, seleccione el idioma que desea traducir. Ver a continuación

      traducir-paso-2

    3. Se encontrará en una pantalla con todos los archivos fuente listados, seleccione Translate All en la parte superior derecha (Ver abajo)

      traducir-paso-3

    4. Luego se te introducirá en el Portal de Traducción, en este portal encontrarás lo siguiente

      1. Versión en inglés del texto
      2. Marcar para introducir la traducción del idioma del texto en blanco
      3. Sugerencias automatizadas para el texto
      4. Lista de palabras que necesita traducir
      5. Un lugar para comentarios si algo necesita aclaración

      traducir-paso-4

    5. Desde aquí completarás tus traducciones como quieras y finalizarás una vez hayas terminado.

    6. Su traducción será revisada y aprobada en el momento oportuno. tenga en cuenta que las traducciones pueden tardar un par de días antes de que se llenen en la documentación desplegada.

    - + \ No newline at end of file diff --git a/es/docs/pre-release/developers/block_explorer/index.html b/es/docs/pre-release/developers/block_explorer/index.html index 92fae3d3cc0..863de479e9d 100644 --- a/es/docs/pre-release/developers/block_explorer/index.html +++ b/es/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/es/docs/pre-release/developers/faucet/index.html b/es/docs/pre-release/developers/faucet/index.html index d1472ce5f83..5e4d9c6d7a2 100644 --- a/es/docs/pre-release/developers/faucet/index.html +++ b/es/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/es/docs/pre-release/developers/foundry_guide/index.html b/es/docs/pre-release/developers/foundry_guide/index.html index cf96eb9cf30..139429298e6 100644 --- a/es/docs/pre-release/developers/foundry_guide/index.html +++ b/es/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/es/docs/pre-release/developers/general-information/index.html b/es/docs/pre-release/developers/general-information/index.html index dd5bec8a206..9adf2dc6c9c 100644 --- a/es/docs/pre-release/developers/general-information/index.html +++ b/es/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/es/docs/pre-release/developers/hardhat_guide/index.html b/es/docs/pre-release/developers/hardhat_guide/index.html index fda38f5b26a..a2dec2fc466 100644 --- a/es/docs/pre-release/developers/hardhat_guide/index.html +++ b/es/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/es/docs/pre-release/developers/intro/index.html b/es/docs/pre-release/developers/intro/index.html index eaf34d8f9c9..82c43d34772 100644 --- a/es/docs/pre-release/developers/intro/index.html +++ b/es/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/es/docs/pre-release/developers/local_development/index.html b/es/docs/pre-release/developers/local_development/index.html index c8ee91775e7..ea60f7b72ee 100644 --- a/es/docs/pre-release/developers/local_development/index.html +++ b/es/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/es/docs/pre-release/developers/quick_start/index.html b/es/docs/pre-release/developers/quick_start/index.html index 71cdcd15d81..6797f676f99 100644 --- a/es/docs/pre-release/developers/quick_start/index.html +++ b/es/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/es/docs/pre-release/developers/remix_guide/index.html b/es/docs/pre-release/developers/remix_guide/index.html index 301cbfa0562..d01b7055541 100644 --- a/es/docs/pre-release/developers/remix_guide/index.html +++ b/es/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/es/docs/pre-release/developers/setting-up-metamask/index.html b/es/docs/pre-release/developers/setting-up-metamask/index.html index 619a8593c8d..e5d1ff6a6bd 100644 --- a/es/docs/pre-release/developers/setting-up-metamask/index.html +++ b/es/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/es/docs/pre-release/intro/index.html b/es/docs/pre-release/intro/index.html index 93a24f7122d..f259fe5711c 100644 --- a/es/docs/pre-release/intro/index.html +++ b/es/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/es/docs/pre-release/operators_and_staking/intro/index.html b/es/docs/pre-release/operators_and_staking/intro/index.html index d0b2c64485d..997e6f0ba4c 100644 --- a/es/docs/pre-release/operators_and_staking/intro/index.html +++ b/es/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/es/docs/pre-release/operators_and_staking/operators/index.html b/es/docs/pre-release/operators_and_staking/operators/index.html index 7057a39c8d9..d0eb4dc7294 100644 --- a/es/docs/pre-release/operators_and_staking/operators/index.html +++ b/es/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/es/docs/pre-release/operators_and_staking/staking/index.html b/es/docs/pre-release/operators_and_staking/staking/index.html index 72292d7a054..04fbfec9214 100644 --- a/es/docs/pre-release/operators_and_staking/staking/index.html +++ b/es/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/es/docs/pre-release/protocol/common_problems/index.html b/es/docs/pre-release/protocol/common_problems/index.html index b4b7ff48550..4ba85b2fa8d 100644 --- a/es/docs/pre-release/protocol/common_problems/index.html +++ b/es/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Problemas habituales

    Aunque Subspace se esfuerza por publicar software libre de errores, los usuarios pueden encontrarse con ciertos errores. Algunos de ellos pueden ignorarse sin peligro, mientras que otros requieren atención.

    Problemas comunes y formas de resolverlos

    Error al marcar la telemetría del dns

    Error al marcar /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Personalizado { kind: Otro, error: Timeout }

    Este error está relacionado sólo con el servidor de telemetría. Es algo que puede ocurrir ocasionalmente, pero que no afecta al farming. Puedes ignorarlo sin problemas.

    Farmer atascado en el trazado, no avanza en varias horas

    Prueba a reiniciar tu nodo o farmer. Hemos observado que a veces, al crear parcelas más grandes, puede parecer que el proceso se detiene, pero continúa automáticamente al cabo de un tiempo.

    Instrucción ilegal (core dumped)

    Este error está causado por CPUs antiguas sin el soporte de instrucciones necesario (por ejemplo, ADX 4). Puede solucionarse compilando el software desde el código fuente en esa máquina.

    Aunque los procesadores sin instrucciones ADX son compatibles, su rendimiento se verá afectado significativamente en comparación con los procesadores que sí admiten instrucciones ADX.

    La mayoría de los procesadores de sobremesa modernos a partir de Broadwell por parte de Intel y Ryzen (ZEN 1) por parte de AMD sí soportan las instrucciones ADX necesarias y no deberían verse afectados por el error.

    No hay recompensas tras varios días de farming

    Por favor, asegúrese de que:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Fallo en la recuperación de la pieza perdida

    ERROR single_disk_plot{disk_farm_index=0}:
    subpace_farmers _components::segment_reconstruction: La recuperación de la pieza faltante falló. perdido_piece_índice=135

    No se trata de un error crucial y puede ignorarse.

    Error al importar el consenso de bloques

    Error al importar el bloque "número_bloque", error de consenso: Error de importación: Base de datos

    Es probable que tu PC se haya quedado sin espacio. Considere la posibilidad de liberar espacio eliminando archivos innecesarios y vuelva a intentarlo. Alternativamente, puede ajustar la cantidad de parcela para que coincida con el espacio disponible en disco

    No se puede crear el bloque en la ranura. No hay mejor cabecera de bloque

    No se puede crear el bloque en la ranura. No hay mejor cabecera de bloque: Fallo en la búsqueda de cadena: No se ha podido obtener la cabecera para el hash

    Es probable que tu PC se haya quedado sin espacio. Considere la posibilidad de liberar espacio eliminando archivos innecesarios y vuelva a intentarlo. Alternativamente, puede ajustar la cantidad de parcela para que coincida con el espacio disponible en disco

    La sincronización rápida de nodos (más de 100 bloques por segundo) sólo llega hasta ±20.000 bloques, después la velocidad de sincronización disminuye considerablemente.

    A medida que aumente el tamaño de la base de datos y los bloques se hagan más grandes (ya que los agricultores empezaron a producir votos), se espera que la velocidad de sincronización se establezca en un número menor. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Reintentando... piece_index=57

    Esto no es un error sino más bien una advertencia, es algo de esperar en una Red de Almacenamiento Descentralizada. No hay nada que tengas que hacer como usuario con este aviso, es probable que aparezca de vez en cuando pero mientras no haya otros errores más catastróficos se puede ignorar.

    Error al construir un farmer: existe el archivo

    0: Error al crear un farmer
    1: Error de creación de parcela de disco único: Error de E/S: El archivo existe (os error 17)
    2: Error de E/S: El fichero existe (os error 17)
    3: El archivo existe (os error 17)

    El sistema detecta una instalación preexistente. Si este es el caso, usted podría considerar wiping la configuración actual y re-initializing la CLI para asegurar una instalación limpia.

    Error de importación de bloque: Ataque potencial de largo alcance: bloque no en cadena finalizada.

    WARN sc_service::client::client: Error de importación del bloque: ataque de largo alcance Potential: bloque que no está en cadena finalizada.

    El nodo de alguna manera terminó siendo en un tenedor, trate de limpiar y empezar de cero.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/es/docs/pre-release/protocol/port-forwarding/index.html b/es/docs/pre-release/protocol/port-forwarding/index.html index d81e939bf40..7346e9e341a 100644 --- a/es/docs/pre-release/protocol/port-forwarding/index.html +++ b/es/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Cómo reenviar puertos

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    En primer lugar, antes de redirigir puertos es importante entender lo que eso significa realmente. Le recomendamos encarecidamente que lea alguna información sobre el tema, aquí tiene una guía que consideramos útil https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    El reenvío de puertos en tu router abrirá una vía específica en tu router para permitir que el tráfico externo fluya hacia dentro o hacia fuera. Esto se suele hacer automáticamente para la mayoría de las aplicaciones, como el puerto 80 para el Protocolo de Transferencia de Archivos, en nuestro caso tendremos que hacerlo manualmente.

    Es importante tener en cuenta que el reenvío de puertos va a ser diferente para la mayoría de los routers, pero hemos incluido algunas instrucciones generales, así como algunos enlaces para algunas de las principales marcas.

    Cómo reenviar puertos


    Recursos adicionales

    Cómo reenviar puertos en el router

    Como Redireccionar Puertos - Guia General de Múltiples Marcas de Routers - Soporte | No-IP Knowledge Base

    Reenvío de puertos en el router

    Paso-1 a. Buscar la dirección de la puerta de enlace predeterminada


    Encuentre la dirección IP de su router local & Dirección IP interna del ordenador.

    La dirección IP del router sólo es necesaria para abrir la configuración del router, si usted sabe cómo abrir la configuración del router - haga eso en su lugar.

    Encontrar la dirección IP del router en Linux

    1. Open up a terminal and type ip route or ip r . 1. Aparecerá la dirección IP de tu router en la parte superior
    2. La parte superior del terminal mostrará la dirección IP típicamente 192.168.0.1 querremos registrar esta Dirección IP
    3. Entonces escribiremos nombre de host -I | awk '{print $1}' que devolverá la dirección IP interna de tu computadora normalmente algo como 192. 68.0.25 asegúrese de registrar esta dirección IP también.

    Encontrar la dirección IP del router en Windows

    1. Abra PowerShell y escriba ipconfig
      1. Esto mostrará la dirección IP de su router doméstico como Puerta de enlace predeterminada:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Encontrar la dirección IP del router en OSX

    1. Abra un terminal y escriba netstat -nr|grep default
      1. Esto mostrará la dirección IP de su router doméstico
    2. La parte superior del terminal mostrará la dirección IP típicamente 192.168.0.1 querremos registrar esta Dirección IP 3. Entonces escribiremos ipconfig getifaddr en1 para inalámbrica, o ipconfig getifaddr en0 para ethernet. que le devolverá la dirección IP interna de su ordenador, típicamente algo como 192.168.0.25 asegúrese de registrar también esta dirección IP.

    Paso-2 a. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/es/docs/pre-release/protocol/pulsar/index.html b/es/docs/pre-release/protocol/pulsar/index.html index adeb32988b6..02d8100e62b 100644 --- a/es/docs/pre-release/protocol/pulsar/index.html +++ b/es/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/es/docs/pre-release/protocol/security/index.html b/es/docs/pre-release/protocol/security/index.html index 88efc1f7d2d..df369c6ecde 100644 --- a/es/docs/pre-release/protocol/security/index.html +++ b/es/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/es/docs/pre-release/protocol/substrate-cli/index.html b/es/docs/pre-release/protocol/substrate-cli/index.html index d272b98adb4..f34ae541003 100644 --- a/es/docs/pre-release/protocol/substrate-cli/index.html +++ b/es/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/es/docs/pre-release/protocol/timekeeping/index.html b/es/docs/pre-release/protocol/timekeeping/index.html index 2697a95b8f2..09b9933eee1 100644 --- a/es/docs/pre-release/protocol/timekeeping/index.html +++ b/es/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/es/docs/pre-release/protocol/wallets/polkadot/index.html b/es/docs/pre-release/protocol/wallets/polkadot/index.html index 679548d5bcd..25bbe5a9c52 100644 --- a/es/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/es/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js es una cartera de Substrate/EVM creada por los creadores de Substrate & Polkadota/Kusama la Parity Team.

    Esta es la cartera de barebones. Esto se debe a que es la cartera de Substrate de barebones que soporta todas las redes basadas en Substrate. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Crear un nuevo monedero

    1. Visite el sitio web Polkadot.js y descargue su versión correspondiente.

      :::tip

      La opción Chrome funcionará en todos los navegadores basados en Chromium como Brave, Vivaldi, & Borde :::

    2. Una vez instalada la extensión, ábrela y haga clic en +, & Crear nueva cuenta

      paso 2

    3. La extensión te mostrará tu semilla de mnemónica de 12 palabras.

      :::peligro ASEGÚRATE DE GUARDAR ESTO DE FORMA SEGURA, Y NUNCA LO COMPARTAS

    :::

    ![paso 3](/img/doc-imgs/polkadot/step-3.png)
    1. Una vez que su semilla esté guardada y guardada de forma segura, haga clic en la casilla de verificación “He guardado mi semilla con seguridad” y haga clic en “Siguiente paso”

    2. El siguiente paso pedirá un Nombre & Contraseña para la cartera. luego haga clic en "Añadir la cuenta con la semilla generada"

      paso 5

    3. ¡Felicidades ha creado una cartera de polkadot.js!

      paso 6

    Importar una semilla existente

    Algunos usuarios pueden ser provistos de una frase de semilla mnemónica existente que puede haber sido proporcionada por Subspace-Desktop, si este es el caso que querrá seguir esta parte de la guía.

    1. Instala la extensión (Ver paso 1 de la sección anterior)

    2. Una vez instalada la extensión, ábrela y haga clic en +, & Crear nueva cuenta

      paso-2a

    3. Escribe o pega tu frase de semilla mnemónica de 12 palabras & haz clic en Siguiente

      paso-3a

    4. El siguiente paso pedirá un Nombre & Contraseña para la cartera. luego haga clic en Añadir la cuenta con la semilla suministrada

      paso-4 a

    Solución de problemas

    Si usted se enfrenta a algún problema o desea aprender sobre otras características de SubWallet, por favor vea el Polkadot Oficial . s Documentación. Hemos incluido algunas preguntas frecuentes básicas a continuación.

    ¿Cómo puedo encontrar mi dirección pública?

    • Puede ver su dirección pública por defecto de sustrato justo debajo de su nombre de cartera dentro de la extensión

      problema-1

    • Puede ver su dirección pública de Subspace Testnet a través de la ... menú y ajustar la Permitir usar en cualquier cadena desplegable a Subespacio de red, una vez que salgas verás que la dirección pública comienza ahora con st

      problema-2

      problema-10

    No veo la Testnet de Subspace ni ninguna red de subspace como opción en la configuración de la cadena

    • Como se ve a continuación, a veces cuando instala o actualiza por primera vez la cartera Substrate necesitará actualizar los metadatos del monedero.

      problema-3

    1. Ve al Explorador de Subespacio/Polkadot aquí: Portal de Polkadot/Substrate

    2. Se le pedirá que permita que la extensión se conecte, haga clic Sí, permitir el acceso a esta aplicación

      problema-4

    3. En la página web, haga clic en ajustes

      problema-5

    4. Haga clic en Metadatos

      problema-6

    5. Haga clic en Actualizar Metadatos

      problema-7

    6. Obtendrás una ventana emergente de la extensión solicitándole que confirme el clic Sí, hacer esta actualización de metadatos

      problema-8

    7. Ahora verás Subespacio Testnet como una opción en la Permitir el uso en cualquier cadena desplegable.

      problema-9

    ¿Cómo puedo hacer una copia de seguridad de mi cartera?

    1. Puede hacer una copia de seguridad/exportar su cartera a través del menú ..., luego haga clic en Exportar cuenta

      problema-11

    2. Luego ingresará la contraseña de su monedero y haga clic en Quiero exportar esta cuenta

      problema-12

    - + \ No newline at end of file diff --git a/es/docs/pre-release/protocol/wallets/subwallet/index.html b/es/docs/pre-release/protocol/wallets/subwallet/index.html index 89b079f310e..6c6221ac162 100644 --- a/es/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/es/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recomendado)

    note

    SubWallet es una cartera de Substrate/EVM de terceros creada por el equipo Subwallet.

    Esta guía seguirá el camino de la extensión del navegador. También hay una aplicación móvil disponible para Android y IOS.

    SubWallet es una pasarela multiversa Web3 para el ecosistema de Substrate. Nuestra visión es brindarle la forma más sencilla y segura de conectarse a las aplicaciones basadas en blockchain.

    Para obtener más información sobre SubWallet visite su Sitio Web.

    Crear o importar una nueva cartera

    1. Visite el sitio web Polkadot.js y descargue su versión correspondiente.

    2. Una vez instalada la extensión, ábrela y haga clic en +, & Crear nueva cuenta

      paso 2

    3. La extensión le dará hasta cuatro opciones. Lo más probable es que quieras seleccionar Crear una nueva cuenta

      :::tip Si desea importar un monedero **existente** y luego seleccione `Importar desde semilla preexistente`

      :::

      ![paso 3](/img/doc-imgs/subwallet/create-new.png)
    4. Cuando crees una cuenta nueva verás lo siguiente.

      :::info Info SubWallet soporta Substrate y EVM, así que cuando se genera una cartera, verá la opción superior que es simplemente la información de la cadena de substrate, entonces una sección etiquetada EVM que es información del monedero evm. **Para subspace, actualmente no tenemos integraciones EVM por lo que puedes ignorar esta porción.**

      :::

      ![paso-4 a](/img/doc-imgs/subwallet/select-account.png)
    1. Comprueba qué cuentas te gustaría importar y comprueba He guardado mi semilla de mnemonía de forma segura y haz clic en Siguiente

      :::peligro ASEGÚRATE DE GUARDAR ESTO DE FORMA SEGURA, Y NUNCA LO COMPARTAS

    :::

    ![paso 5](/img/doc-imgs/subwallet/next-step.png)
    1. A continuación crearemos una contraseña para nuestra cartera. (¡Asegúrate de no reutilizar contraseñas!)

      paso 6

    2. Siguiente Subwallet te preguntará qué redes quieres habilitar, Desplácese hacia abajo y seleccione las redes de subspace Testnet/s incluyendo cualquier otra red basada en substratos que desee utilizar en el futuro, haga clic en Confirmar

      paso 7

    3. ¡Felicidades ha creado completamente su cartera de substrate con subwallet!

    Añadir nuevas redes a SubWallet

    :::precaución

    Este tutorial asume que ya ha completado la configuración de SubWallet. Si no lo ha hecho, consulte la sección anterior

    :::

    SubWallet soporta añadir redes personalizadas. Esto puede ser útil para redes en desarrollo como la red de Subspace, ya que tenemos puntos finales RPC que cambian regularmente y versiones de redes de prueba, y pronto varios dominios. A continuación encontrarás una sencilla guía sobre cómo añadir estas nuevas redes. Además, intentaremos mantener una lista actualizada de los puntos finales RPC activos a continuación para su desarrollo.

    RPC extremos
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Abre SubWallet, selecciona el menú de 3 líneas en la parte superior izquierda de la cartera

      paso-rpc-1

    2. Dentro del menú de configuración verás la opción de Gestionar redes, haz clic en ella.

      paso-rpc-2

    3. Dentro del menú Administrar redes verás un + en la esquina superior derecha, haz clic en esto

      paso-rpc-3

    4. Se abrirá el menú Importar red, donde verás unas cuantas opciones

      • URL de proveedor
      • Nombre de la red
      • Símbolo
      • Explorador de bloques
      • URL de Crowdloan

      La única opción que se requiere es la URL del proveedor. Puedes añadir un explorador si lo deseas, pero no es necesario. (El Explorador de subspace actual está disponible aquí.

      Puedes consultar los Puntos finales de RPC anteriores para conocer las URL de proveedores disponibles para la red Subspace.

      paso-rpc-4

    5. Rellena la URL del proveedor, una vez que haga clic en esta casilla, marcará la URL y agregará el resto de la información, luego haga clic en Guardar.

      • En este ejemplo usaremos wss://rpc.devnet.subspace.network

      paso-rpc-5

    6. Luego se le devolverá a la pantalla de red donde podrá ver su nueva red que fue añadida.

      paso-rpc-6

    Solución de problemas

    Si usted se enfrenta a algún problema o desea aprender sobre otras características de SubWallet, por favor vea el Polkadot Oficial . s Documentación. Hemos incluido algunas preguntas frecuentes básicas a continuación.

    ¿Cómo puedo encontrar mi dirección pública?

    • Puede ver su dirección pública por defecto de substrate justo debajo de su nombre de cartera dentro de la extensión

      problema-1

    • Puede ver su dirección pública de Subspace Testnet a través del menú desplegable y configurando la cadena en Subspace Testnet. Una vez que haya terminado, verá que la dirección pública ahora comienza con st

      paso-8 a

    No veo la Testnet de Subspace ni ninguna red de subspace como opción en la configuración de la cadena

    • A veces, al instalar o actualizar el monedero Substrate por primera vez, será necesario actualizar los metadatos del monedero.
    1. Ve al Explorador de Subespacio/Polkadot aquí: Portal de Polkadot/Substrate

    2. Se le pedirá que permita la conexión de la extensión, seleccione qué cuenta desea conectar y haga clic en Conectar

      problema-4

    3. En la página web, haga clic en ajustes

      problema-5

    4. Haga clic en Metadatos

      problema-6

    5. Haga clic en Actualizar Metadatos

      problema-3

    6. Recibirás una ventana emergente de la extensión indicando que tus metadatos están desactualizados, confirmando que quieres actualizar. Haga clic en Metadatos

      problema-4

    7. Ahora verás Subespacio Testnet como una opción en la Permitir el uso en cualquier cadena desplegable.

      problema-9

    ¿Cómo puedo hacer una copia de seguridad de mi cartera?

    1. Puede hacer una copia de seguridad/exportar su cartera a través del menú ..., luego haga clic en Exportar cuenta

      problema-6

    2. A continuación, ingresará su contraseña de cartera y haga clic en el método de exportación preferido que desea utilizar, Llave privada, QR, o JSON

      problema-7

    - + \ No newline at end of file diff --git a/es/docs/protocol/common_problems/index.html b/es/docs/protocol/common_problems/index.html index 4d2f3df6310..8e2d4f54b11 100644 --- a/es/docs/protocol/common_problems/index.html +++ b/es/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Problemas habituales

    Aunque Subspace se esfuerza por publicar software libre de errores, los usuarios pueden encontrarse con ciertos errores. Algunos de ellos pueden ignorarse sin peligro, mientras que otros requieren atención.

    Problemas comunes y formas de resolverlos

    Error al marcar la telemetría del dns

    Error al marcar /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Personalizado { kind: Otro, error: Timeout }

    Este error está relacionado sólo con el servidor de telemetría. Es algo que puede ocurrir ocasionalmente, pero que no afecta al farming. Puedes ignorarlo sin problemas.

    Farmer atascado en el trazado, no avanza en varias horas

    Prueba a reiniciar tu nodo o farmer. Hemos observado que a veces, al crear parcelas más grandes, puede parecer que el proceso se detiene, pero continúa automáticamente al cabo de un tiempo.

    Instrucción ilegal (core dumped)

    Este error está causado por CPUs antiguas sin el soporte de instrucciones necesario (por ejemplo, ADX 4). Puede solucionarse compilando el software desde el código fuente en esa máquina.

    Aunque los procesadores sin instrucciones ADX son compatibles, su rendimiento se verá afectado significativamente en comparación con los procesadores que sí admiten instrucciones ADX.

    La mayoría de los procesadores de sobremesa modernos a partir de Broadwell por parte de Intel y Ryzen (ZEN 1) por parte de AMD sí soportan las instrucciones ADX necesarias y no deberían verse afectados por el error.

    No hay recompensas tras varios días de farming

    Por favor, asegúrese de que:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Fallo en la recuperación de la pieza perdida

    ERROR single_disk_plot{disk_farm_index=0}:
    subpace_farmers _components::segment_reconstruction: La recuperación de la pieza faltante falló. perdido_piece_índice=135

    No se trata de un error crucial y puede ignorarse.

    Error al importar el consenso de bloques

    Error al importar el bloque "número_bloque", error de consenso: Error de importación: Base de datos

    Es probable que tu PC se haya quedado sin espacio. Considere la posibilidad de liberar espacio eliminando archivos innecesarios y vuelva a intentarlo. Alternativamente, puede ajustar la cantidad de parcela para que coincida con el espacio disponible en disco

    No se puede crear el bloque en la ranura. No hay mejor cabecera de bloque

    No se puede crear el bloque en la ranura. No hay mejor cabecera de bloque: Fallo en la búsqueda de cadena: No se ha podido obtener la cabecera para el hash

    Es probable que tu PC se haya quedado sin espacio. Considere la posibilidad de liberar espacio eliminando archivos innecesarios y vuelva a intentarlo. Alternativamente, puede ajustar la cantidad de parcela para que coincida con el espacio disponible en disco

    La sincronización rápida de nodos (más de 100 bloques por segundo) sólo llega hasta ±20.000 bloques, después la velocidad de sincronización disminuye considerablemente.

    A medida que aumente el tamaño de la base de datos y los bloques se hagan más grandes (ya que los agricultores empezaron a producir votos), se espera que la velocidad de sincronización se establezca en un número menor. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Reintentando... piece_index=57

    Esto no es un error sino más bien una advertencia, es algo de esperar en una Red de Almacenamiento Descentralizada. No hay nada que tengas que hacer como usuario con este aviso, es probable que aparezca de vez en cuando pero mientras no haya otros errores más catastróficos se puede ignorar.

    Error al construir un farmer: existe el archivo

    0: Error al crear un farmer
    1: Error de creación de parcela de disco único: Error de E/S: El archivo existe (os error 17)
    2: Error de E/S: El fichero existe (os error 17)
    3: El archivo existe (os error 17)

    El sistema detecta una instalación preexistente. Si este es el caso, usted podría considerar wiping la configuración actual y re-initializing la CLI para asegurar una instalación limpia.

    Error de importación de bloque: Ataque potencial de largo alcance: bloque no en cadena finalizada.

    WARN sc_service::client::client: Error de importación del bloque: ataque de largo alcance Potential: bloque que no está en cadena finalizada.

    El nodo de alguna manera terminó siendo en un tenedor, trate de limpiar y empezar de cero.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/es/docs/protocol/port-forwarding/index.html b/es/docs/protocol/port-forwarding/index.html index 11b00eb059c..934e005b55b 100644 --- a/es/docs/protocol/port-forwarding/index.html +++ b/es/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Cómo reenviar puertos

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    En primer lugar, antes de redirigir puertos es importante entender lo que eso significa realmente. Le recomendamos encarecidamente que lea alguna información sobre el tema, aquí tiene una guía que consideramos útil https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    El reenvío de puertos en tu router abrirá una vía específica en tu router para permitir que el tráfico externo fluya hacia dentro o hacia fuera. Esto se suele hacer automáticamente para la mayoría de las aplicaciones, como el puerto 80 para el Protocolo de Transferencia de Archivos, en nuestro caso tendremos que hacerlo manualmente.

    Es importante tener en cuenta que el reenvío de puertos va a ser diferente para la mayoría de los routers, pero hemos incluido algunas instrucciones generales, así como algunos enlaces para algunas de las principales marcas.

    Cómo reenviar puertos


    Recursos adicionales

    Cómo reenviar puertos en el router

    Como Redireccionar Puertos - Guia General de Múltiples Marcas de Routers - Soporte | No-IP Knowledge Base

    Reenvío de puertos en el router

    Paso-1 a. Buscar la dirección de la puerta de enlace predeterminada


    Encuentre la dirección IP de su router local & Dirección IP interna del ordenador.

    La dirección IP del router sólo es necesaria para abrir la configuración del router, si usted sabe cómo abrir la configuración del router - haga eso en su lugar.

    Encontrar la dirección IP del router en Linux

    1. Open up a terminal and type ip route or ip r . 1. Aparecerá la dirección IP de tu router en la parte superior
    2. La parte superior del terminal mostrará la dirección IP típicamente 192.168.0.1 querremos registrar esta Dirección IP
    3. Entonces escribiremos nombre de host -I | awk '{print $1}' que devolverá la dirección IP interna de tu computadora normalmente algo como 192. 68.0.25 asegúrese de registrar esta dirección IP también.

    Encontrar la dirección IP del router en Windows

    1. Abra PowerShell y escriba ipconfig
      1. Esto mostrará la dirección IP de su router doméstico como Puerta de enlace predeterminada:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Encontrar la dirección IP del router en OSX

    1. Abra un terminal y escriba netstat -nr|grep default
      1. Esto mostrará la dirección IP de su router doméstico
    2. La parte superior del terminal mostrará la dirección IP típicamente 192.168.0.1 querremos registrar esta Dirección IP 3. Entonces escribiremos ipconfig getifaddr en1 para inalámbrica, o ipconfig getifaddr en0 para ethernet. que le devolverá la dirección IP interna de su ordenador, típicamente algo como 192.168.0.25 asegúrese de registrar también esta dirección IP.

    Paso-2 a. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/es/docs/protocol/pulsar/index.html b/es/docs/protocol/pulsar/index.html index 335db29e8ea..a91e0d0f8f3 100644 --- a/es/docs/protocol/pulsar/index.html +++ b/es/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Advertencia

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Solución de problemas


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/es/docs/protocol/security/index.html b/es/docs/protocol/security/index.html index e5e75211935..37b150f08f0 100644 --- a/es/docs/protocol/security/index.html +++ b/es/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/es/docs/protocol/substrate-cli/index.html b/es/docs/protocol/substrate-cli/index.html index 2ee53f3fde8..eb10e082306 100644 --- a/es/docs/protocol/substrate-cli/index.html +++ b/es/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/es/docs/protocol/timekeeping/index.html b/es/docs/protocol/timekeeping/index.html index a180a09401c..d472c2116a8 100644 --- a/es/docs/protocol/timekeeping/index.html +++ b/es/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/es/docs/protocol/wallets/polkadot/index.html b/es/docs/protocol/wallets/polkadot/index.html index 857a7146fa9..1dc3cb79609 100644 --- a/es/docs/protocol/wallets/polkadot/index.html +++ b/es/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js es una cartera de Substrate/EVM creada por los creadores de Substrate & Polkadota/Kusama la Parity Team.

    Esta es la cartera de barebones. Esto se debe a que es la cartera de Substrate de barebones que soporta todas las redes basadas en Substrate. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Crear un nuevo monedero

    1. Visite el sitio web Polkadot.js y descargue su versión correspondiente.

      :::tip

      La opción Chrome funcionará en todos los navegadores basados en Chromium como Brave, Vivaldi, & Borde :::

    2. Una vez instalada la extensión, ábrela y haga clic en +, & Crear nueva cuenta

      paso 2

    3. La extensión te mostrará tu semilla de mnemónica de 12 palabras.

      :::peligro ASEGÚRATE DE GUARDAR ESTO DE FORMA SEGURA, Y NUNCA LO COMPARTAS

    :::

    ![paso 3](/img/doc-imgs/polkadot/step-3.png)
    1. Una vez que su semilla esté guardada y guardada de forma segura, haga clic en la casilla de verificación “He guardado mi semilla con seguridad” y haga clic en “Siguiente paso”

    2. El siguiente paso pedirá un Nombre & Contraseña para la cartera. luego haga clic en "Añadir la cuenta con la semilla generada"

      paso 5

    3. ¡Felicidades ha creado una cartera de polkadot.js!

      paso 6

    Importar una semilla existente

    Algunos usuarios pueden ser provistos de una frase de semilla mnemónica existente que puede haber sido proporcionada por Subspace-Desktop, si este es el caso que querrá seguir esta parte de la guía.

    1. Instala la extensión (Ver paso 1 de la sección anterior)

    2. Una vez instalada la extensión, ábrela y haga clic en +, & Crear nueva cuenta

      paso-2a

    3. Escribe o pega tu frase de semilla mnemónica de 12 palabras & haz clic en Siguiente

      paso-3a

    4. El siguiente paso pedirá un Nombre & Contraseña para la cartera. luego haga clic en Añadir la cuenta con la semilla suministrada

      paso-4 a

    Solución de problemas

    Si usted se enfrenta a algún problema o desea aprender sobre otras características de SubWallet, por favor vea el Polkadot Oficial . s Documentación. Hemos incluido algunas preguntas frecuentes básicas a continuación.

    ¿Cómo puedo encontrar mi dirección pública?

    • Puede ver su dirección pública por defecto de sustrato justo debajo de su nombre de cartera dentro de la extensión

      problema-1

    • Puede ver su dirección pública de Subspace Testnet a través de la ... menú y ajustar la Permitir usar en cualquier cadena desplegable a Subespacio de red, una vez que salgas verás que la dirección pública comienza ahora con st

      problema-2

      problema-10

    No veo la Testnet de Subspace ni ninguna red de subspace como opción en la configuración de la cadena

    • Como se ve a continuación, a veces cuando instala o actualiza por primera vez la cartera Substrate necesitará actualizar los metadatos del monedero.

      problema-3

    1. Ve al Explorador de Subespacio/Polkadot aquí: Portal de Polkadot/Substrate

    2. Se le pedirá que permita que la extensión se conecte, haga clic Sí, permitir el acceso a esta aplicación

      problema-4

    3. En la página web, haga clic en ajustes

      problema-5

    4. Haga clic en Metadatos

      problema-6

    5. Haga clic en Actualizar Metadatos

      problema-7

    6. Obtendrás una ventana emergente de la extensión solicitándole que confirme el clic Sí, hacer esta actualización de metadatos

      problema-8

    7. Ahora verás Subespacio Testnet como una opción en la Permitir el uso en cualquier cadena desplegable.

      problema-9

    ¿Cómo puedo hacer una copia de seguridad de mi cartera?

    1. Puede hacer una copia de seguridad/exportar su cartera a través del menú ..., luego haga clic en Exportar cuenta

      problema-11

    2. Luego ingresará la contraseña de su monedero y haga clic en Quiero exportar esta cuenta

      problema-12

    - + \ No newline at end of file diff --git a/es/docs/protocol/wallets/subwallet/index.html b/es/docs/protocol/wallets/subwallet/index.html index 149aa639d5d..3367e117c5e 100644 --- a/es/docs/protocol/wallets/subwallet/index.html +++ b/es/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recomendado)

    note

    SubWallet es una cartera de Substrate/EVM de terceros creada por el equipo Subwallet.

    Esta guía seguirá el camino de la extensión del navegador. También hay una aplicación móvil disponible para Android y IOS.

    SubWallet es una pasarela multiversa Web3 para el ecosistema de Substrate. Nuestra visión es brindarle la forma más sencilla y segura de conectarse a las aplicaciones basadas en blockchain.

    Para obtener más información sobre SubWallet visite su Sitio Web.

    Crear o importar una nueva cartera

    1. Visite el sitio web Polkadot.js y descargue su versión correspondiente.

    2. Una vez instalada la extensión, ábrela y haga clic en +, & Crear nueva cuenta

      paso 2

    3. La extensión le dará hasta cuatro opciones. Lo más probable es que quieras seleccionar Crear una nueva cuenta

      :::tip Si desea importar un monedero **existente** y luego seleccione `Importar desde semilla preexistente`

      :::

      ![paso 3](/img/doc-imgs/subwallet/create-new.png)
    4. Cuando crees una cuenta nueva verás lo siguiente.

      :::info Info SubWallet soporta Substrate y EVM, así que cuando se genera una cartera, verá la opción superior que es simplemente la información de la cadena de substrate, entonces una sección etiquetada EVM que es información del monedero evm. **Para subspace, actualmente no tenemos integraciones EVM por lo que puedes ignorar esta porción.**

      :::

      ![paso-4 a](/img/doc-imgs/subwallet/select-account.png)
    1. Comprueba qué cuentas te gustaría importar y comprueba He guardado mi semilla de mnemonía de forma segura y haz clic en Siguiente

      :::peligro ASEGÚRATE DE GUARDAR ESTO DE FORMA SEGURA, Y NUNCA LO COMPARTAS

    :::

    ![paso 5](/img/doc-imgs/subwallet/next-step.png)
    1. A continuación crearemos una contraseña para nuestra cartera. (¡Asegúrate de no reutilizar contraseñas!)

      paso 6

    2. Siguiente Subwallet te preguntará qué redes quieres habilitar, Desplácese hacia abajo y seleccione las redes de subspace Testnet/s incluyendo cualquier otra red basada en substratos que desee utilizar en el futuro, haga clic en Confirmar

      paso 7

    3. ¡Felicidades ha creado completamente su cartera de substrate con subwallet!

    Añadir nuevas redes a SubWallet

    :::precaución

    Este tutorial asume que ya ha completado la configuración de SubWallet. Si no lo ha hecho, consulte la sección anterior

    :::

    SubWallet soporta añadir redes personalizadas. Esto puede ser útil para redes en desarrollo como la red de Subspace, ya que tenemos puntos finales RPC que cambian regularmente y versiones de redes de prueba, y pronto varios dominios. A continuación encontrarás una sencilla guía sobre cómo añadir estas nuevas redes. Además, intentaremos mantener una lista actualizada de los puntos finales RPC activos a continuación para su desarrollo.

    RPC extremos
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Abre SubWallet, selecciona el menú de 3 líneas en la parte superior izquierda de la cartera

      paso-rpc-1

    2. Dentro del menú de configuración verás la opción de Gestionar redes, haz clic en ella.

      paso-rpc-2

    3. Dentro del menú Administrar redes verás un + en la esquina superior derecha, haz clic en esto

      paso-rpc-3

    4. Se abrirá el menú Importar red, donde verás unas cuantas opciones

      • URL de proveedor
      • Nombre de la red
      • Símbolo
      • Explorador de bloques
      • URL de Crowdloan

      La única opción que se requiere es la URL del proveedor. Puedes añadir un explorador si lo deseas, pero no es necesario. (El Explorador de subspace actual está disponible aquí.

      Puedes consultar los Puntos finales de RPC anteriores para conocer las URL de proveedores disponibles para la red Subspace.

      paso-rpc-4

    5. Rellena la URL del proveedor, una vez que haga clic en esta casilla, marcará la URL y agregará el resto de la información, luego haga clic en Guardar.

      • En este ejemplo usaremos wss://rpc.devnet.subspace.network

      paso-rpc-5

    6. Luego se le devolverá a la pantalla de red donde podrá ver su nueva red que fue añadida.

      paso-rpc-6

    Solución de problemas

    Si usted se enfrenta a algún problema o desea aprender sobre otras características de SubWallet, por favor vea el Polkadot Oficial . s Documentación. Hemos incluido algunas preguntas frecuentes básicas a continuación.

    ¿Cómo puedo encontrar mi dirección pública?

    • Puede ver su dirección pública por defecto de substrate justo debajo de su nombre de cartera dentro de la extensión

      problema-1

    • Puede ver su dirección pública de Subspace Testnet a través del menú desplegable y configurando la cadena en Subspace Testnet. Una vez que haya terminado, verá que la dirección pública ahora comienza con st

      paso-8 a

    No veo la Testnet de Subspace ni ninguna red de subspace como opción en la configuración de la cadena

    • A veces, al instalar o actualizar el monedero Substrate por primera vez, será necesario actualizar los metadatos del monedero.
    1. Ve al Explorador de Subespacio/Polkadot aquí: Portal de Polkadot/Substrate

    2. Se le pedirá que permita la conexión de la extensión, seleccione qué cuenta desea conectar y haga clic en Conectar

      problema-4

    3. En la página web, haga clic en ajustes

      problema-5

    4. Haga clic en Metadatos

      problema-6

    5. Haga clic en Actualizar Metadatos

      problema-3

    6. Recibirás una ventana emergente de la extensión indicando que tus metadatos están desactualizados, confirmando que quieres actualizar. Haga clic en Metadatos

      problema-4

    7. Ahora verás Subespacio Testnet como una opción en la Permitir el uso en cualquier cadena desplegable.

      problema-9

    ¿Cómo puedo hacer una copia de seguridad de mi cartera?

    1. Puede hacer una copia de seguridad/exportar su cartera a través del menú ..., luego haga clic en Exportar cuenta

      problema-6

    2. A continuación, ingresará su contraseña de cartera y haga clic en el método de exportación preferido que desea utilizar, Llave privada, QR, o JSON

      problema-7

    - + \ No newline at end of file diff --git a/es/index.html b/es/index.html index 85102961f8d..1acd3af2244 100644 --- a/es/index.html +++ b/es/index.html @@ -7,13 +7,13 @@ - +

    Granja desde cualquier lugar

    Gana recompensas ejecutando un nodo de agricultor comprometiendo un disco de repuesto. No se requiere una configuración costosa ni capital por adelantado.

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/es/markdown-page/index.html b/es/markdown-page/index.html index bf274e8f1f6..237bc6d6c4d 100644 --- a/es/markdown-page/index.html +++ b/es/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/fr/404.html b/fr/404.html index 50c505a352e..846faca8ebf 100644 --- a/fr/404.html +++ b/fr/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/fr/assets/js/616f90ac.f77cd287.js b/fr/assets/js/616f90ac.42191d8a.js similarity index 73% rename from fr/assets/js/616f90ac.f77cd287.js rename to fr/assets/js/616f90ac.42191d8a.js index 0f41d3bf9cb..3f2afaac0b3 100644 --- a/fr/assets/js/616f90ac.f77cd287.js +++ b/fr/assets/js/616f90ac.42191d8a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[9561],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/fr/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/fr/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/fr/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/fr/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/fr/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[9561],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/fr/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/fr/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/fr/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/fr/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/fr/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/fr/assets/js/runtime~main.a0dbfb48.js b/fr/assets/js/runtime~main.72ae5915.js similarity index 99% rename from fr/assets/js/runtime~main.a0dbfb48.js rename to fr/assets/js/runtime~main.72ae5915.js index 5e06ebf08c9..999422ea72e 100644 --- a/fr/assets/js/runtime~main.a0dbfb48.js +++ b/fr/assets/js/runtime~main.72ae5915.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({29:"f54644ff",53:"935f2afb",253:"f5d633c9",466:"69275b5f",541:"917f3442",654:"8a78d126",829:"3d0bfef7",929:"97fc9c99",935:"68cf62e6",1271:"bf0516f7",1467:"57a1d77e",1546:"5c1f08a1",1802:"19f89b22",1880:"03d76945",1927:"5a5c2480",2111:"d71612d6",2139:"b50ce09c",2188:"1b25ebe1",2427:"6fa038bd",2751:"e0937e25",3080:"7f4b3b34",3085:"1f391b9e",3095:"fe95e1ff",3121:"fab255f6",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3625:"422c1f48",3937:"1bb594c1",3974:"63bd21fc",4018:"c1bb268b",4081:"3c2d53f0",4109:"81024c96",4130:"973c4367",4501:"004d462d",4706:"cbe9f291",4998:"89c28daa",5483:"497c9242",5586:"da15fafe",5592:"a23052d9",5760:"2525d9f2",5906:"fdbf673a",6029:"17c16919",6271:"fb525cf1",6276:"d8c25e76",7154:"e15be8e9",7238:"3fe942c8",7250:"93623c78",7288:"46716ae0",7325:"0c219efe",7370:"c09f4ff7",7414:"393be207",7489:"90a42308",7671:"d392192b",7707:"3b738aed",7709:"e48f89ca",7918:"17896441",8203:"b3aff7af",8340:"773a8039",8361:"22c3f8ac",8668:"0051a102",9007:"b05eea0b",9064:"9d504b62",9171:"1dddd1ab",9197:"d6e3933b",9256:"9d880ce1",9493:"2704d3a6",9514:"1be78505",9561:"616f90ac",9817:"14eb3368",9907:"59ea5fb2",9942:"d8a39045"}[e]||e)+"."+{29:"4b755175",53:"9b507380",253:"a9c7f4d2",466:"e3ac93bd",541:"84d1f7cb",654:"aeda32c9",814:"dc8c3a26",829:"669e3af1",929:"18ed97de",935:"82dddf28",1271:"b573fc5d",1467:"025f4887",1546:"e529df3e",1802:"e447e2ce",1880:"8022e3e7",1927:"7063b3c0",2111:"1646d554",2139:"04e87b12",2188:"b319c7dc",2427:"71cc8316",2751:"711620ed",3080:"dfd04bb0",3085:"3a447380",3095:"62584972",3121:"37e367da",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3625:"2a1f62c0",3937:"78846fad",3974:"6a99009c",4018:"32869a07",4081:"c39e702b",4109:"df16a36c",4130:"7527ced3",4501:"4e5471be",4706:"c1b84ec3",4972:"4a54fd4a",4998:"c1665669",5483:"1d971b91",5586:"63288c1d",5592:"65f12ffa",5760:"9fe9a326",5906:"4bd9306d",6029:"d4c8708b",6271:"30d41c19",6276:"025b7e51",7154:"48d2bad5",7238:"7ad0cdd1",7250:"64cbfa70",7288:"170ff89c",7325:"ffbd5ab7",7370:"27ce8732",7414:"30e48ec5",7489:"18214e5d",7671:"f6249a0b",7707:"03a27166",7709:"e91d46ab",7918:"e3da5265",8203:"ac8415d4",8340:"a959465f",8361:"4618b616",8668:"3058d029",9007:"c45707af",9064:"4ae9f2a5",9171:"a9cb1498",9197:"e44cca11",9256:"a3e3514d",9493:"c4064c7c",9514:"478c02c6",9561:"f77cd287",9817:"b7ea7ab7",9907:"f18949e8",9942:"cb4f09e8"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/fr/",r.gca=function(e){return e={17896441:"7918",f54644ff:"29","935f2afb":"53",f5d633c9:"253","69275b5f":"466","917f3442":"541","8a78d126":"654","3d0bfef7":"829","97fc9c99":"929","68cf62e6":"935",bf0516f7:"1271","57a1d77e":"1467","5c1f08a1":"1546","19f89b22":"1802","03d76945":"1880","5a5c2480":"1927",d71612d6:"2111",b50ce09c:"2139","1b25ebe1":"2188","6fa038bd":"2427",e0937e25:"2751","7f4b3b34":"3080","1f391b9e":"3085",fe95e1ff:"3095",fab255f6:"3121",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","422c1f48":"3625","1bb594c1":"3937","63bd21fc":"3974",c1bb268b:"4018","3c2d53f0":"4081","81024c96":"4109","973c4367":"4130","004d462d":"4501",cbe9f291:"4706","89c28daa":"4998","497c9242":"5483",da15fafe:"5586",a23052d9:"5592","2525d9f2":"5760",fdbf673a:"5906","17c16919":"6029",fb525cf1:"6271",d8c25e76:"6276",e15be8e9:"7154","3fe942c8":"7238","93623c78":"7250","46716ae0":"7288","0c219efe":"7325",c09f4ff7:"7370","393be207":"7414","90a42308":"7489",d392192b:"7671","3b738aed":"7707",e48f89ca:"7709",b3aff7af:"8203","773a8039":"8340","22c3f8ac":"8361","0051a102":"8668",b05eea0b:"9007","9d504b62":"9064","1dddd1ab":"9171",d6e3933b:"9197","9d880ce1":"9256","2704d3a6":"9493","1be78505":"9514","616f90ac":"9561","14eb3368":"9817","59ea5fb2":"9907",d8a39045:"9942"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({29:"f54644ff",53:"935f2afb",253:"f5d633c9",466:"69275b5f",541:"917f3442",654:"8a78d126",829:"3d0bfef7",929:"97fc9c99",935:"68cf62e6",1271:"bf0516f7",1467:"57a1d77e",1546:"5c1f08a1",1802:"19f89b22",1880:"03d76945",1927:"5a5c2480",2111:"d71612d6",2139:"b50ce09c",2188:"1b25ebe1",2427:"6fa038bd",2751:"e0937e25",3080:"7f4b3b34",3085:"1f391b9e",3095:"fe95e1ff",3121:"fab255f6",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3625:"422c1f48",3937:"1bb594c1",3974:"63bd21fc",4018:"c1bb268b",4081:"3c2d53f0",4109:"81024c96",4130:"973c4367",4501:"004d462d",4706:"cbe9f291",4998:"89c28daa",5483:"497c9242",5586:"da15fafe",5592:"a23052d9",5760:"2525d9f2",5906:"fdbf673a",6029:"17c16919",6271:"fb525cf1",6276:"d8c25e76",7154:"e15be8e9",7238:"3fe942c8",7250:"93623c78",7288:"46716ae0",7325:"0c219efe",7370:"c09f4ff7",7414:"393be207",7489:"90a42308",7671:"d392192b",7707:"3b738aed",7709:"e48f89ca",7918:"17896441",8203:"b3aff7af",8340:"773a8039",8361:"22c3f8ac",8668:"0051a102",9007:"b05eea0b",9064:"9d504b62",9171:"1dddd1ab",9197:"d6e3933b",9256:"9d880ce1",9493:"2704d3a6",9514:"1be78505",9561:"616f90ac",9817:"14eb3368",9907:"59ea5fb2",9942:"d8a39045"}[e]||e)+"."+{29:"4b755175",53:"9b507380",253:"a9c7f4d2",466:"e3ac93bd",541:"84d1f7cb",654:"aeda32c9",814:"dc8c3a26",829:"669e3af1",929:"18ed97de",935:"82dddf28",1271:"b573fc5d",1467:"025f4887",1546:"e529df3e",1802:"e447e2ce",1880:"8022e3e7",1927:"7063b3c0",2111:"1646d554",2139:"04e87b12",2188:"b319c7dc",2427:"71cc8316",2751:"711620ed",3080:"dfd04bb0",3085:"3a447380",3095:"62584972",3121:"37e367da",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3625:"2a1f62c0",3937:"78846fad",3974:"6a99009c",4018:"32869a07",4081:"c39e702b",4109:"df16a36c",4130:"7527ced3",4501:"4e5471be",4706:"c1b84ec3",4972:"4a54fd4a",4998:"c1665669",5483:"1d971b91",5586:"63288c1d",5592:"65f12ffa",5760:"9fe9a326",5906:"4bd9306d",6029:"d4c8708b",6271:"30d41c19",6276:"025b7e51",7154:"48d2bad5",7238:"7ad0cdd1",7250:"64cbfa70",7288:"170ff89c",7325:"ffbd5ab7",7370:"27ce8732",7414:"30e48ec5",7489:"18214e5d",7671:"f6249a0b",7707:"03a27166",7709:"e91d46ab",7918:"e3da5265",8203:"ac8415d4",8340:"a959465f",8361:"4618b616",8668:"3058d029",9007:"c45707af",9064:"4ae9f2a5",9171:"a9cb1498",9197:"e44cca11",9256:"a3e3514d",9493:"c4064c7c",9514:"478c02c6",9561:"42191d8a",9817:"b7ea7ab7",9907:"f18949e8",9942:"cb4f09e8"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/fr/",r.gca=function(e){return e={17896441:"7918",f54644ff:"29","935f2afb":"53",f5d633c9:"253","69275b5f":"466","917f3442":"541","8a78d126":"654","3d0bfef7":"829","97fc9c99":"929","68cf62e6":"935",bf0516f7:"1271","57a1d77e":"1467","5c1f08a1":"1546","19f89b22":"1802","03d76945":"1880","5a5c2480":"1927",d71612d6:"2111",b50ce09c:"2139","1b25ebe1":"2188","6fa038bd":"2427",e0937e25:"2751","7f4b3b34":"3080","1f391b9e":"3085",fe95e1ff:"3095",fab255f6:"3121",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","422c1f48":"3625","1bb594c1":"3937","63bd21fc":"3974",c1bb268b:"4018","3c2d53f0":"4081","81024c96":"4109","973c4367":"4130","004d462d":"4501",cbe9f291:"4706","89c28daa":"4998","497c9242":"5483",da15fafe:"5586",a23052d9:"5592","2525d9f2":"5760",fdbf673a:"5906","17c16919":"6029",fb525cf1:"6271",d8c25e76:"6276",e15be8e9:"7154","3fe942c8":"7238","93623c78":"7250","46716ae0":"7288","0c219efe":"7325",c09f4ff7:"7370","393be207":"7414","90a42308":"7489",d392192b:"7671","3b738aed":"7707",e48f89ca:"7709",b3aff7af:"8203","773a8039":"8340","22c3f8ac":"8361","0051a102":"8668",b05eea0b:"9007","9d504b62":"9064","1dddd1ab":"9171",d6e3933b:"9197","9d880ce1":"9256","2704d3a6":"9493","1be78505":"9514","616f90ac":"9561","14eb3368":"9817","59ea5fb2":"9907",d8a39045:"9942"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n - + - + \ No newline at end of file diff --git a/fr/docs/category/developer-documentation/index.html b/fr/docs/category/developer-documentation/index.html index a7d1cdd1b25..dedb80536a0 100644 --- a/fr/docs/category/developer-documentation/index.html +++ b/fr/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/fr/docs/category/get-started-with-farming/index.html b/fr/docs/category/get-started-with-farming/index.html index a37f98ca29d..8e0fcc316f3 100644 --- a/fr/docs/category/get-started-with-farming/index.html +++ b/fr/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/fr/docs/category/operators-and-staking/index.html b/fr/docs/category/operators-and-staking/index.html index e143a3ffb94..8a7b94e20c6 100644 --- a/fr/docs/category/operators-and-staking/index.html +++ b/fr/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/fr/docs/category/wallets/index.html b/fr/docs/category/wallets/index.html index 09d809ea878..814c670695d 100644 --- a/fr/docs/category/wallets/index.html +++ b/fr/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/fr/docs/community/CODE_OF_CONDUCT/index.html b/fr/docs/community/CODE_OF_CONDUCT/index.html index 9c0a78828fc..cb936decd68 100644 --- a/fr/docs/community/CODE_OF_CONDUCT/index.html +++ b/fr/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/fr/docs/community/contribute/index.html b/fr/docs/community/contribute/index.html index d837c986858..359a4df3129 100644 --- a/fr/docs/community/contribute/index.html +++ b/fr/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/fr/docs/community/index.html b/fr/docs/community/index.html index d622dc20a53..3cfd6a6eb7e 100644 --- a/fr/docs/community/index.html +++ b/fr/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/fr/docs/community/translate/index.html b/fr/docs/community/translate/index.html index e0b6f8ff650..0e54c89e40a 100644 --- a/fr/docs/community/translate/index.html +++ b/fr/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/fr/docs/developers/block_explorer/index.html b/fr/docs/developers/block_explorer/index.html index b44841d90d2..465cf73fc39 100644 --- a/fr/docs/developers/block_explorer/index.html +++ b/fr/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/fr/docs/developers/faucet/index.html b/fr/docs/developers/faucet/index.html index 56eb1124c9f..2a4233287ae 100644 --- a/fr/docs/developers/faucet/index.html +++ b/fr/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/fr/docs/developers/foundry_guide/index.html b/fr/docs/developers/foundry_guide/index.html index 10f0468cf13..658b2681195 100644 --- a/fr/docs/developers/foundry_guide/index.html +++ b/fr/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/fr/docs/developers/general-information/index.html b/fr/docs/developers/general-information/index.html index 810be784ee2..c6529fcb524 100644 --- a/fr/docs/developers/general-information/index.html +++ b/fr/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/fr/docs/developers/hardhat_guide/index.html b/fr/docs/developers/hardhat_guide/index.html index ac82ee6bb36..35f8369d361 100644 --- a/fr/docs/developers/hardhat_guide/index.html +++ b/fr/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/fr/docs/developers/intro/index.html b/fr/docs/developers/intro/index.html index 3714fbb72a2..4bac5b28004 100644 --- a/fr/docs/developers/intro/index.html +++ b/fr/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/fr/docs/developers/local_development/index.html b/fr/docs/developers/local_development/index.html index e08eb73063d..a47ab121985 100644 --- a/fr/docs/developers/local_development/index.html +++ b/fr/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/fr/docs/developers/quick_start/index.html b/fr/docs/developers/quick_start/index.html index c207b0721fe..6612cd0d5a8 100644 --- a/fr/docs/developers/quick_start/index.html +++ b/fr/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/fr/docs/developers/remix_guide/index.html b/fr/docs/developers/remix_guide/index.html index 24675284c18..45204148e46 100644 --- a/fr/docs/developers/remix_guide/index.html +++ b/fr/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/fr/docs/developers/setting-up-metamask/index.html b/fr/docs/developers/setting-up-metamask/index.html index 1b23c0b40f2..658e856c8bd 100644 --- a/fr/docs/developers/setting-up-metamask/index.html +++ b/fr/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/fr/docs/intro/index.html b/fr/docs/intro/index.html index f05edbfbdb6..8f7acbe16d8 100644 --- a/fr/docs/intro/index.html +++ b/fr/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/fr/docs/operators_and_staking/intro/index.html b/fr/docs/operators_and_staking/intro/index.html index 448bb4e6f4a..cedd0f0ef90 100644 --- a/fr/docs/operators_and_staking/intro/index.html +++ b/fr/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/fr/docs/operators_and_staking/operators/index.html b/fr/docs/operators_and_staking/operators/index.html index 01381fc568c..0414549fd2a 100644 --- a/fr/docs/operators_and_staking/operators/index.html +++ b/fr/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/fr/docs/operators_and_staking/staking/index.html b/fr/docs/operators_and_staking/staking/index.html index 47bb8e49d1a..a89ed6bfab5 100644 --- a/fr/docs/operators_and_staking/staking/index.html +++ b/fr/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/fr/docs/pre-release/category/community/index.html b/fr/docs/pre-release/category/community/index.html index 0279964e92d..2e9e9c8e5d2 100644 --- a/fr/docs/pre-release/category/community/index.html +++ b/fr/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/fr/docs/pre-release/category/developer-documentation/index.html b/fr/docs/pre-release/category/developer-documentation/index.html index ed65a2fde81..917fc02dec4 100644 --- a/fr/docs/pre-release/category/developer-documentation/index.html +++ b/fr/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/fr/docs/pre-release/category/get-started-with-farming/index.html b/fr/docs/pre-release/category/get-started-with-farming/index.html index dcf6743f8e4..774dbb8b8e7 100644 --- a/fr/docs/pre-release/category/get-started-with-farming/index.html +++ b/fr/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/fr/docs/pre-release/category/operators-and-staking/index.html b/fr/docs/pre-release/category/operators-and-staking/index.html index 576af4673a7..02ff40e3a56 100644 --- a/fr/docs/pre-release/category/operators-and-staking/index.html +++ b/fr/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/fr/docs/pre-release/category/wallets/index.html b/fr/docs/pre-release/category/wallets/index.html index 042fb5ba932..3eeed953029 100644 --- a/fr/docs/pre-release/category/wallets/index.html +++ b/fr/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/fr/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/fr/docs/pre-release/community/CODE_OF_CONDUCT/index.html index 663ffd8ef8b..00c0c3394d2 100644 --- a/fr/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/fr/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/community/contribute/index.html b/fr/docs/pre-release/community/contribute/index.html index e3e69f92d40..dcc690e24d6 100644 --- a/fr/docs/pre-release/community/contribute/index.html +++ b/fr/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/community/index.html b/fr/docs/pre-release/community/index.html index aa4e9c4aa69..6c017869808 100644 --- a/fr/docs/pre-release/community/index.html +++ b/fr/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/fr/docs/pre-release/community/translate/index.html b/fr/docs/pre-release/community/translate/index.html index 23394ea19fa..be5f890180e 100644 --- a/fr/docs/pre-release/community/translate/index.html +++ b/fr/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/developers/block_explorer/index.html b/fr/docs/pre-release/developers/block_explorer/index.html index 8f1001ba887..592bd4628df 100644 --- a/fr/docs/pre-release/developers/block_explorer/index.html +++ b/fr/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/developers/faucet/index.html b/fr/docs/pre-release/developers/faucet/index.html index 8e58ee85118..41533f69ae7 100644 --- a/fr/docs/pre-release/developers/faucet/index.html +++ b/fr/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/developers/foundry_guide/index.html b/fr/docs/pre-release/developers/foundry_guide/index.html index 31adfb825e0..97ba99fcafa 100644 --- a/fr/docs/pre-release/developers/foundry_guide/index.html +++ b/fr/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/developers/general-information/index.html b/fr/docs/pre-release/developers/general-information/index.html index d301d32db56..9040a3e788c 100644 --- a/fr/docs/pre-release/developers/general-information/index.html +++ b/fr/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/developers/hardhat_guide/index.html b/fr/docs/pre-release/developers/hardhat_guide/index.html index cf9aec132b0..b64196ce72f 100644 --- a/fr/docs/pre-release/developers/hardhat_guide/index.html +++ b/fr/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/fr/docs/pre-release/developers/intro/index.html b/fr/docs/pre-release/developers/intro/index.html index d5b94fe9d52..e5c69b374e4 100644 --- a/fr/docs/pre-release/developers/intro/index.html +++ b/fr/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/developers/local_development/index.html b/fr/docs/pre-release/developers/local_development/index.html index efe2ecaf0e7..811edba77f8 100644 --- a/fr/docs/pre-release/developers/local_development/index.html +++ b/fr/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/developers/quick_start/index.html b/fr/docs/pre-release/developers/quick_start/index.html index 0f58bd644ad..5f6ba060020 100644 --- a/fr/docs/pre-release/developers/quick_start/index.html +++ b/fr/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/developers/remix_guide/index.html b/fr/docs/pre-release/developers/remix_guide/index.html index 06961e9d427..3d9e715efb7 100644 --- a/fr/docs/pre-release/developers/remix_guide/index.html +++ b/fr/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/developers/setting-up-metamask/index.html b/fr/docs/pre-release/developers/setting-up-metamask/index.html index cf87a9bf8f8..08e3bd36f42 100644 --- a/fr/docs/pre-release/developers/setting-up-metamask/index.html +++ b/fr/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/intro/index.html b/fr/docs/pre-release/intro/index.html index 432009ea416..47984491041 100644 --- a/fr/docs/pre-release/intro/index.html +++ b/fr/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/operators_and_staking/intro/index.html b/fr/docs/pre-release/operators_and_staking/intro/index.html index 91a490e8d3c..0c1f2a4d876 100644 --- a/fr/docs/pre-release/operators_and_staking/intro/index.html +++ b/fr/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/operators_and_staking/operators/index.html b/fr/docs/pre-release/operators_and_staking/operators/index.html index b6579be50cb..ab112f2ae86 100644 --- a/fr/docs/pre-release/operators_and_staking/operators/index.html +++ b/fr/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/operators_and_staking/staking/index.html b/fr/docs/pre-release/operators_and_staking/staking/index.html index 3948a5ba566..3fe5ee3f872 100644 --- a/fr/docs/pre-release/operators_and_staking/staking/index.html +++ b/fr/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/fr/docs/pre-release/protocol/common_problems/index.html b/fr/docs/pre-release/protocol/common_problems/index.html index d7b12ba8987..dd6f9d8ef67 100644 --- a/fr/docs/pre-release/protocol/common_problems/index.html +++ b/fr/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/protocol/port-forwarding/index.html b/fr/docs/pre-release/protocol/port-forwarding/index.html index 1c60124a754..85eec0b5ed4 100644 --- a/fr/docs/pre-release/protocol/port-forwarding/index.html +++ b/fr/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/fr/docs/pre-release/protocol/pulsar/index.html b/fr/docs/pre-release/protocol/pulsar/index.html index 587179d630c..f0a3c14bc95 100644 --- a/fr/docs/pre-release/protocol/pulsar/index.html +++ b/fr/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/protocol/security/index.html b/fr/docs/pre-release/protocol/security/index.html index 661d0a47e06..0b0326b24c4 100644 --- a/fr/docs/pre-release/protocol/security/index.html +++ b/fr/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/protocol/substrate-cli/index.html b/fr/docs/pre-release/protocol/substrate-cli/index.html index 0461097ae42..f87a1d9e2d4 100644 --- a/fr/docs/pre-release/protocol/substrate-cli/index.html +++ b/fr/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/protocol/timekeeping/index.html b/fr/docs/pre-release/protocol/timekeeping/index.html index c0ce580c989..3f9c587e97c 100644 --- a/fr/docs/pre-release/protocol/timekeeping/index.html +++ b/fr/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/fr/docs/pre-release/protocol/wallets/polkadot/index.html b/fr/docs/pre-release/protocol/wallets/polkadot/index.html index 07697b0c072..bfd57de7b33 100644 --- a/fr/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/fr/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/fr/docs/pre-release/protocol/wallets/subwallet/index.html b/fr/docs/pre-release/protocol/wallets/subwallet/index.html index 4000fdfaf7e..d84a599640d 100644 --- a/fr/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/fr/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/fr/docs/protocol/common_problems/index.html b/fr/docs/protocol/common_problems/index.html index 9ac1fd76e70..05c8106987b 100644 --- a/fr/docs/protocol/common_problems/index.html +++ b/fr/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/fr/docs/protocol/port-forwarding/index.html b/fr/docs/protocol/port-forwarding/index.html index 0c8e633d64a..bd2633909c9 100644 --- a/fr/docs/protocol/port-forwarding/index.html +++ b/fr/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/fr/docs/protocol/pulsar/index.html b/fr/docs/protocol/pulsar/index.html index 1c38387c70c..fcde07b1a25 100644 --- a/fr/docs/protocol/pulsar/index.html +++ b/fr/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/fr/docs/protocol/security/index.html b/fr/docs/protocol/security/index.html index bcfb9c8d2b5..74068108f7e 100644 --- a/fr/docs/protocol/security/index.html +++ b/fr/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/fr/docs/protocol/substrate-cli/index.html b/fr/docs/protocol/substrate-cli/index.html index b27dfd66885..8abe5f482dd 100644 --- a/fr/docs/protocol/substrate-cli/index.html +++ b/fr/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/fr/docs/protocol/timekeeping/index.html b/fr/docs/protocol/timekeeping/index.html index a6b4a1de9ef..a9a1b18a4c8 100644 --- a/fr/docs/protocol/timekeeping/index.html +++ b/fr/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/fr/docs/protocol/wallets/polkadot/index.html b/fr/docs/protocol/wallets/polkadot/index.html index 6552908c4bd..508b3579c49 100644 --- a/fr/docs/protocol/wallets/polkadot/index.html +++ b/fr/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/fr/docs/protocol/wallets/subwallet/index.html b/fr/docs/protocol/wallets/subwallet/index.html index d247e2b9c19..fc43b86af32 100644 --- a/fr/docs/protocol/wallets/subwallet/index.html +++ b/fr/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/fr/index.html b/fr/index.html index 6bb0530510a..d735eac156c 100644 --- a/fr/index.html +++ b/fr/index.html @@ -7,13 +7,13 @@ - +

    Ferme de n'importe où

    Gagnez des récompenses en exécutant un nœud agriculteur en promettant un disque inutilisé. Aucune configuration coûteuse ou capital initial n'est requis.

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/fr/markdown-page/index.html b/fr/markdown-page/index.html index 433be4eab10..72618dd6d0d 100644 --- a/fr/markdown-page/index.html +++ b/fr/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/hi/404.html b/hi/404.html index e410566d9c8..abe590d5183 100644 --- a/hi/404.html +++ b/hi/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/hi/assets/js/46a2a07a.cdc7919b.js b/hi/assets/js/46a2a07a.2fb92fe8.js similarity index 73% rename from hi/assets/js/46a2a07a.cdc7919b.js rename to hi/assets/js/46a2a07a.2fb92fe8.js index 4b2b54867d1..70606a84fb0 100644 --- a/hi/assets/js/46a2a07a.cdc7919b.js +++ b/hi/assets/js/46a2a07a.2fb92fe8.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[5350],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/hi/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/hi/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/hi/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/hi/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/hi/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[5350],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/hi/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/hi/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/hi/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/hi/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/hi/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/hi/assets/js/runtime~main.46721fb1.js b/hi/assets/js/runtime~main.7a645fea.js similarity index 98% rename from hi/assets/js/runtime~main.46721fb1.js rename to hi/assets/js/runtime~main.7a645fea.js index daeee5dfee4..23bc3a769b9 100644 --- a/hi/assets/js/runtime~main.46721fb1.js +++ b/hi/assets/js/runtime~main.7a645fea.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,d,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={exports:{}};return b[e].call(f.exports,f,f.exports,r),f.exports}r.m=b,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",69:"d6820cca",138:"427aec77",238:"69d1b173",269:"90bbb181",839:"afc7b5a7",1057:"6e13764b",1320:"66058d94",1360:"a5f43002",1726:"bec0a71d",1848:"5bea99d2",2100:"ed31643d",2136:"deb16645",2304:"e010c602",2518:"8068743e",2813:"f4e60fbd",2983:"024e9880",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3593:"4c6c8a7b",3772:"ae3b7d0e",3775:"5f17ea94",3858:"c03d4518",3975:"f15d1652",3984:"8ddfa8b7",4065:"05f39568",4088:"218fa98b",4100:"7ddfdfcb",4363:"7cae6af9",4375:"ded1ad62",4414:"f911a3ea",4423:"622c93c9",4505:"e8260526",4741:"ffb0137b",4782:"0756d84b",4813:"44eca0e8",4955:"519589ec",5137:"627bb662",5279:"00f27c77",5310:"494db7ab",5350:"46a2a07a",5489:"5d50bfdc",5558:"1bd490be",5696:"ab7d46b9",5957:"6b3a81fd",6149:"57c2d824",6500:"29ac2a62",6557:"7e56bdbe",6712:"a8fd3daf",6801:"790bcf1e",6847:"1cee900f",6971:"caa07ba4",7002:"7c1797fd",7370:"c09f4ff7",7414:"393be207",7689:"660eadc5",7796:"e49a0b83",7918:"17896441",8235:"67269af4",8382:"a9fd5e45",8469:"187be5f2",8534:"5c451126",8746:"9c24ff15",9154:"c8a00c1a",9219:"dce65c56",9252:"44da5c26",9388:"250efa59",9514:"1be78505",9740:"92e7f292",9817:"14eb3368"}[e]||e)+"."+{53:"0d987f71",69:"c36306c8",138:"6a9ca249",238:"41decf22",269:"acc4b3c0",814:"dc8c3a26",839:"e160b722",1057:"f7faa7da",1320:"640c4785",1360:"fcc95a3c",1726:"5b7c8df3",1848:"746d3337",2100:"45bd9871",2136:"058b7a87",2304:"dc227da9",2518:"91b08bb4",2813:"5665c6eb",2983:"80ff4e11",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3593:"4d69a78d",3772:"388f70e9",3775:"fdb07278",3858:"e5942934",3975:"cb4b37b1",3984:"ec823852",4065:"98605dff",4088:"91430c76",4100:"d13d124f",4363:"fe1dfdd2",4375:"5e6ac222",4414:"a05681d3",4423:"4aa48d28",4505:"5b71687b",4741:"90d066ec",4782:"7bd7b412",4813:"c4e1ce51",4955:"e29fd0bd",4972:"4a54fd4a",5137:"938869bb",5279:"0505f95c",5310:"a9f4a629",5350:"cdc7919b",5489:"bf7230e6",5558:"19b421b4",5696:"fa73f6b6",5957:"2d1c4875",6149:"72c0c125",6500:"da8d5bd3",6557:"9c3822a5",6712:"6eba5e48",6801:"f17d1800",6847:"06fdd5c4",6971:"fded6f74",7002:"0e26d8f9",7370:"b13f9487",7414:"1b720d9c",7689:"bfee7edb",7796:"cff1a2f9",7918:"e3da5265",8235:"b516c5b0",8382:"8e287506",8469:"e4f74147",8534:"8e1c063d",8746:"c71aacea",9154:"c0cf67c0",9219:"406f8dcc",9252:"0fb3d260",9388:"2f401fad",9514:"478c02c6",9740:"b6c35894",9817:"b7ea7ab7"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},c="portal:",r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/hi/",r.gca=function(e){return e={17896441:"7918","935f2afb":"53",d6820cca:"69","427aec77":"138","69d1b173":"238","90bbb181":"269",afc7b5a7:"839","6e13764b":"1057","66058d94":"1320",a5f43002:"1360",bec0a71d:"1726","5bea99d2":"1848",ed31643d:"2100",deb16645:"2136",e010c602:"2304","8068743e":"2518",f4e60fbd:"2813","024e9880":"2983","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","4c6c8a7b":"3593",ae3b7d0e:"3772","5f17ea94":"3775",c03d4518:"3858",f15d1652:"3975","8ddfa8b7":"3984","05f39568":"4065","218fa98b":"4088","7ddfdfcb":"4100","7cae6af9":"4363",ded1ad62:"4375",f911a3ea:"4414","622c93c9":"4423",e8260526:"4505",ffb0137b:"4741","0756d84b":"4782","44eca0e8":"4813","519589ec":"4955","627bb662":"5137","00f27c77":"5279","494db7ab":"5310","46a2a07a":"5350","5d50bfdc":"5489","1bd490be":"5558",ab7d46b9:"5696","6b3a81fd":"5957","57c2d824":"6149","29ac2a62":"6500","7e56bdbe":"6557",a8fd3daf:"6712","790bcf1e":"6801","1cee900f":"6847",caa07ba4:"6971","7c1797fd":"7002",c09f4ff7:"7370","393be207":"7414","660eadc5":"7689",e49a0b83:"7796","67269af4":"8235",a9fd5e45:"8382","187be5f2":"8469","5c451126":"8534","9c24ff15":"8746",c8a00c1a:"9154",dce65c56:"9219","44da5c26":"9252","250efa59":"9388","1be78505":"9514","92e7f292":"9740","14eb3368":"9817"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>d=e[a]=[f,c]));f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n{"use strict";var e,a,f,d,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={exports:{}};return b[e].call(f.exports,f,f.exports,r),f.exports}r.m=b,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",69:"d6820cca",138:"427aec77",238:"69d1b173",269:"90bbb181",839:"afc7b5a7",1057:"6e13764b",1320:"66058d94",1360:"a5f43002",1726:"bec0a71d",1848:"5bea99d2",2100:"ed31643d",2136:"deb16645",2304:"e010c602",2518:"8068743e",2813:"f4e60fbd",2983:"024e9880",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3593:"4c6c8a7b",3772:"ae3b7d0e",3775:"5f17ea94",3858:"c03d4518",3975:"f15d1652",3984:"8ddfa8b7",4065:"05f39568",4088:"218fa98b",4100:"7ddfdfcb",4363:"7cae6af9",4375:"ded1ad62",4414:"f911a3ea",4423:"622c93c9",4505:"e8260526",4741:"ffb0137b",4782:"0756d84b",4813:"44eca0e8",4955:"519589ec",5137:"627bb662",5279:"00f27c77",5310:"494db7ab",5350:"46a2a07a",5489:"5d50bfdc",5558:"1bd490be",5696:"ab7d46b9",5957:"6b3a81fd",6149:"57c2d824",6500:"29ac2a62",6557:"7e56bdbe",6712:"a8fd3daf",6801:"790bcf1e",6847:"1cee900f",6971:"caa07ba4",7002:"7c1797fd",7370:"c09f4ff7",7414:"393be207",7689:"660eadc5",7796:"e49a0b83",7918:"17896441",8235:"67269af4",8382:"a9fd5e45",8469:"187be5f2",8534:"5c451126",8746:"9c24ff15",9154:"c8a00c1a",9219:"dce65c56",9252:"44da5c26",9388:"250efa59",9514:"1be78505",9740:"92e7f292",9817:"14eb3368"}[e]||e)+"."+{53:"0d987f71",69:"c36306c8",138:"6a9ca249",238:"41decf22",269:"acc4b3c0",814:"dc8c3a26",839:"e160b722",1057:"f7faa7da",1320:"640c4785",1360:"fcc95a3c",1726:"5b7c8df3",1848:"746d3337",2100:"45bd9871",2136:"058b7a87",2304:"dc227da9",2518:"91b08bb4",2813:"5665c6eb",2983:"80ff4e11",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3593:"4d69a78d",3772:"388f70e9",3775:"fdb07278",3858:"e5942934",3975:"cb4b37b1",3984:"ec823852",4065:"98605dff",4088:"91430c76",4100:"d13d124f",4363:"fe1dfdd2",4375:"5e6ac222",4414:"a05681d3",4423:"4aa48d28",4505:"5b71687b",4741:"90d066ec",4782:"7bd7b412",4813:"c4e1ce51",4955:"e29fd0bd",4972:"4a54fd4a",5137:"938869bb",5279:"0505f95c",5310:"a9f4a629",5350:"2fb92fe8",5489:"bf7230e6",5558:"19b421b4",5696:"fa73f6b6",5957:"2d1c4875",6149:"72c0c125",6500:"da8d5bd3",6557:"9c3822a5",6712:"6eba5e48",6801:"f17d1800",6847:"06fdd5c4",6971:"fded6f74",7002:"0e26d8f9",7370:"b13f9487",7414:"1b720d9c",7689:"bfee7edb",7796:"cff1a2f9",7918:"e3da5265",8235:"b516c5b0",8382:"8e287506",8469:"e4f74147",8534:"8e1c063d",8746:"c71aacea",9154:"c0cf67c0",9219:"406f8dcc",9252:"0fb3d260",9388:"2f401fad",9514:"478c02c6",9740:"b6c35894",9817:"b7ea7ab7"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},c="portal:",r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/hi/",r.gca=function(e){return e={17896441:"7918","935f2afb":"53",d6820cca:"69","427aec77":"138","69d1b173":"238","90bbb181":"269",afc7b5a7:"839","6e13764b":"1057","66058d94":"1320",a5f43002:"1360",bec0a71d:"1726","5bea99d2":"1848",ed31643d:"2100",deb16645:"2136",e010c602:"2304","8068743e":"2518",f4e60fbd:"2813","024e9880":"2983","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","4c6c8a7b":"3593",ae3b7d0e:"3772","5f17ea94":"3775",c03d4518:"3858",f15d1652:"3975","8ddfa8b7":"3984","05f39568":"4065","218fa98b":"4088","7ddfdfcb":"4100","7cae6af9":"4363",ded1ad62:"4375",f911a3ea:"4414","622c93c9":"4423",e8260526:"4505",ffb0137b:"4741","0756d84b":"4782","44eca0e8":"4813","519589ec":"4955","627bb662":"5137","00f27c77":"5279","494db7ab":"5310","46a2a07a":"5350","5d50bfdc":"5489","1bd490be":"5558",ab7d46b9:"5696","6b3a81fd":"5957","57c2d824":"6149","29ac2a62":"6500","7e56bdbe":"6557",a8fd3daf:"6712","790bcf1e":"6801","1cee900f":"6847",caa07ba4:"6971","7c1797fd":"7002",c09f4ff7:"7370","393be207":"7414","660eadc5":"7689",e49a0b83:"7796","67269af4":"8235",a9fd5e45:"8382","187be5f2":"8469","5c451126":"8534","9c24ff15":"8746",c8a00c1a:"9154",dce65c56:"9219","44da5c26":"9252","250efa59":"9388","1be78505":"9514","92e7f292":"9740","14eb3368":"9817"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>d=e[a]=[f,c]));f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n - + - + \ No newline at end of file diff --git a/hi/docs/category/developer-documentation/index.html b/hi/docs/category/developer-documentation/index.html index 3c06618cc43..de4a35da97e 100644 --- a/hi/docs/category/developer-documentation/index.html +++ b/hi/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/hi/docs/category/get-started-with-farming/index.html b/hi/docs/category/get-started-with-farming/index.html index 1515b4bc414..ec32149fa29 100644 --- a/hi/docs/category/get-started-with-farming/index.html +++ b/hi/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/hi/docs/category/operators-and-staking/index.html b/hi/docs/category/operators-and-staking/index.html index 1d41db4c3df..afd5b70f052 100644 --- a/hi/docs/category/operators-and-staking/index.html +++ b/hi/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/hi/docs/category/wallets/index.html b/hi/docs/category/wallets/index.html index 0407a399946..d4ec4a57498 100644 --- a/hi/docs/category/wallets/index.html +++ b/hi/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/hi/docs/community/CODE_OF_CONDUCT/index.html b/hi/docs/community/CODE_OF_CONDUCT/index.html index f02b37fe16e..511a9ef5ae8 100644 --- a/hi/docs/community/CODE_OF_CONDUCT/index.html +++ b/hi/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/hi/docs/community/contribute/index.html b/hi/docs/community/contribute/index.html index f2d77c47b79..2bbb034bacd 100644 --- a/hi/docs/community/contribute/index.html +++ b/hi/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/hi/docs/community/index.html b/hi/docs/community/index.html index 9ee7de27a02..e79e8742c4a 100644 --- a/hi/docs/community/index.html +++ b/hi/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/hi/docs/community/translate/index.html b/hi/docs/community/translate/index.html index 6b65fac03f5..eadda93c1e0 100644 --- a/hi/docs/community/translate/index.html +++ b/hi/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/hi/docs/developers/block_explorer/index.html b/hi/docs/developers/block_explorer/index.html index 1d82e993652..a7d2ebb5d4f 100644 --- a/hi/docs/developers/block_explorer/index.html +++ b/hi/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/hi/docs/developers/faucet/index.html b/hi/docs/developers/faucet/index.html index aba57bf782d..590fa02413e 100644 --- a/hi/docs/developers/faucet/index.html +++ b/hi/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/hi/docs/developers/foundry_guide/index.html b/hi/docs/developers/foundry_guide/index.html index 54ad454328f..c1444e12f43 100644 --- a/hi/docs/developers/foundry_guide/index.html +++ b/hi/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/hi/docs/developers/general-information/index.html b/hi/docs/developers/general-information/index.html index b4fbd35e2bf..ee77240e524 100644 --- a/hi/docs/developers/general-information/index.html +++ b/hi/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/hi/docs/developers/hardhat_guide/index.html b/hi/docs/developers/hardhat_guide/index.html index ec95ec5ec54..aa980633878 100644 --- a/hi/docs/developers/hardhat_guide/index.html +++ b/hi/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/hi/docs/developers/intro/index.html b/hi/docs/developers/intro/index.html index 9700171d239..66a10f05151 100644 --- a/hi/docs/developers/intro/index.html +++ b/hi/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/hi/docs/developers/local_development/index.html b/hi/docs/developers/local_development/index.html index 591aadaa27a..7393153754a 100644 --- a/hi/docs/developers/local_development/index.html +++ b/hi/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/hi/docs/developers/quick_start/index.html b/hi/docs/developers/quick_start/index.html index 19be459d812..b328cc299fb 100644 --- a/hi/docs/developers/quick_start/index.html +++ b/hi/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/hi/docs/developers/remix_guide/index.html b/hi/docs/developers/remix_guide/index.html index 8c761b99555..9d61ab6b5db 100644 --- a/hi/docs/developers/remix_guide/index.html +++ b/hi/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/hi/docs/developers/setting-up-metamask/index.html b/hi/docs/developers/setting-up-metamask/index.html index 3a81b038f1a..fff5a17694e 100644 --- a/hi/docs/developers/setting-up-metamask/index.html +++ b/hi/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/hi/docs/intro/index.html b/hi/docs/intro/index.html index eed2b8aba4b..f9535e72c35 100644 --- a/hi/docs/intro/index.html +++ b/hi/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/hi/docs/operators_and_staking/intro/index.html b/hi/docs/operators_and_staking/intro/index.html index 97dd47f50fd..a8917ecbc59 100644 --- a/hi/docs/operators_and_staking/intro/index.html +++ b/hi/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/hi/docs/operators_and_staking/operators/index.html b/hi/docs/operators_and_staking/operators/index.html index c3bfe0b85a7..b2a065974a0 100644 --- a/hi/docs/operators_and_staking/operators/index.html +++ b/hi/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/hi/docs/operators_and_staking/staking/index.html b/hi/docs/operators_and_staking/staking/index.html index 4d2ac3fd5e8..b53be13e5f3 100644 --- a/hi/docs/operators_and_staking/staking/index.html +++ b/hi/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/hi/docs/pre-release/category/community/index.html b/hi/docs/pre-release/category/community/index.html index 057443e32bf..6451648903d 100644 --- a/hi/docs/pre-release/category/community/index.html +++ b/hi/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/hi/docs/pre-release/category/developer-documentation/index.html b/hi/docs/pre-release/category/developer-documentation/index.html index 06b1037edaa..b3214d5223b 100644 --- a/hi/docs/pre-release/category/developer-documentation/index.html +++ b/hi/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/hi/docs/pre-release/category/get-started-with-farming/index.html b/hi/docs/pre-release/category/get-started-with-farming/index.html index 69b2e9a8adf..25f8147234c 100644 --- a/hi/docs/pre-release/category/get-started-with-farming/index.html +++ b/hi/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/hi/docs/pre-release/category/operators-and-staking/index.html b/hi/docs/pre-release/category/operators-and-staking/index.html index 8c90f32f652..9922aed1af9 100644 --- a/hi/docs/pre-release/category/operators-and-staking/index.html +++ b/hi/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/hi/docs/pre-release/category/wallets/index.html b/hi/docs/pre-release/category/wallets/index.html index 3bb7714728f..226d613bf68 100644 --- a/hi/docs/pre-release/category/wallets/index.html +++ b/hi/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/hi/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/hi/docs/pre-release/community/CODE_OF_CONDUCT/index.html index 37b68650094..15a433f9309 100644 --- a/hi/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/hi/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/community/contribute/index.html b/hi/docs/pre-release/community/contribute/index.html index 029fd205ab4..d6551edc758 100644 --- a/hi/docs/pre-release/community/contribute/index.html +++ b/hi/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/community/index.html b/hi/docs/pre-release/community/index.html index 3ea616a7025..4f13101750c 100644 --- a/hi/docs/pre-release/community/index.html +++ b/hi/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/hi/docs/pre-release/community/translate/index.html b/hi/docs/pre-release/community/translate/index.html index 0e9db4678d2..6e9d0ef4a84 100644 --- a/hi/docs/pre-release/community/translate/index.html +++ b/hi/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/developers/block_explorer/index.html b/hi/docs/pre-release/developers/block_explorer/index.html index 7678e4212ce..e66e15649e5 100644 --- a/hi/docs/pre-release/developers/block_explorer/index.html +++ b/hi/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/developers/faucet/index.html b/hi/docs/pre-release/developers/faucet/index.html index b51c6c7b425..32c986d918f 100644 --- a/hi/docs/pre-release/developers/faucet/index.html +++ b/hi/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/developers/foundry_guide/index.html b/hi/docs/pre-release/developers/foundry_guide/index.html index 3da4abada35..c162f7531da 100644 --- a/hi/docs/pre-release/developers/foundry_guide/index.html +++ b/hi/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/developers/general-information/index.html b/hi/docs/pre-release/developers/general-information/index.html index 9cc76cced9b..ec48eab221e 100644 --- a/hi/docs/pre-release/developers/general-information/index.html +++ b/hi/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/developers/hardhat_guide/index.html b/hi/docs/pre-release/developers/hardhat_guide/index.html index da68d4eba62..adf19602ed4 100644 --- a/hi/docs/pre-release/developers/hardhat_guide/index.html +++ b/hi/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/hi/docs/pre-release/developers/intro/index.html b/hi/docs/pre-release/developers/intro/index.html index 46f8b4de776..18563d4507d 100644 --- a/hi/docs/pre-release/developers/intro/index.html +++ b/hi/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/developers/local_development/index.html b/hi/docs/pre-release/developers/local_development/index.html index 712b870a88a..bf3e0b3e10d 100644 --- a/hi/docs/pre-release/developers/local_development/index.html +++ b/hi/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/developers/quick_start/index.html b/hi/docs/pre-release/developers/quick_start/index.html index d2051d5fce7..337f57f0c70 100644 --- a/hi/docs/pre-release/developers/quick_start/index.html +++ b/hi/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/developers/remix_guide/index.html b/hi/docs/pre-release/developers/remix_guide/index.html index 786d3f8901f..f4d3f5cc3ac 100644 --- a/hi/docs/pre-release/developers/remix_guide/index.html +++ b/hi/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/developers/setting-up-metamask/index.html b/hi/docs/pre-release/developers/setting-up-metamask/index.html index 43943061da3..f110740da60 100644 --- a/hi/docs/pre-release/developers/setting-up-metamask/index.html +++ b/hi/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/intro/index.html b/hi/docs/pre-release/intro/index.html index d3f9bcb08ec..951894ce2c3 100644 --- a/hi/docs/pre-release/intro/index.html +++ b/hi/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/operators_and_staking/intro/index.html b/hi/docs/pre-release/operators_and_staking/intro/index.html index ebbeda1382c..b177af86da3 100644 --- a/hi/docs/pre-release/operators_and_staking/intro/index.html +++ b/hi/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/operators_and_staking/operators/index.html b/hi/docs/pre-release/operators_and_staking/operators/index.html index e74819c0e6f..b9757fa9fd9 100644 --- a/hi/docs/pre-release/operators_and_staking/operators/index.html +++ b/hi/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/operators_and_staking/staking/index.html b/hi/docs/pre-release/operators_and_staking/staking/index.html index cd062e3ce1e..2b477c54b7c 100644 --- a/hi/docs/pre-release/operators_and_staking/staking/index.html +++ b/hi/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/hi/docs/pre-release/protocol/common_problems/index.html b/hi/docs/pre-release/protocol/common_problems/index.html index 0a109c6754f..ccc78158d54 100644 --- a/hi/docs/pre-release/protocol/common_problems/index.html +++ b/hi/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/protocol/port-forwarding/index.html b/hi/docs/pre-release/protocol/port-forwarding/index.html index 82a1d6343d6..47148f52c60 100644 --- a/hi/docs/pre-release/protocol/port-forwarding/index.html +++ b/hi/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/hi/docs/pre-release/protocol/pulsar/index.html b/hi/docs/pre-release/protocol/pulsar/index.html index 911a66161c7..eea26d33218 100644 --- a/hi/docs/pre-release/protocol/pulsar/index.html +++ b/hi/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/protocol/security/index.html b/hi/docs/pre-release/protocol/security/index.html index b063e37baeb..41c69a6bc62 100644 --- a/hi/docs/pre-release/protocol/security/index.html +++ b/hi/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/protocol/substrate-cli/index.html b/hi/docs/pre-release/protocol/substrate-cli/index.html index b681bfc7d4a..7e1ed0d553a 100644 --- a/hi/docs/pre-release/protocol/substrate-cli/index.html +++ b/hi/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/protocol/timekeeping/index.html b/hi/docs/pre-release/protocol/timekeeping/index.html index d0bc3f2d978..4359412ece7 100644 --- a/hi/docs/pre-release/protocol/timekeeping/index.html +++ b/hi/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/hi/docs/pre-release/protocol/wallets/polkadot/index.html b/hi/docs/pre-release/protocol/wallets/polkadot/index.html index c44e20e9b64..e262ce02212 100644 --- a/hi/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/hi/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/hi/docs/pre-release/protocol/wallets/subwallet/index.html b/hi/docs/pre-release/protocol/wallets/subwallet/index.html index a2df2e9062e..c6b28c7f8c6 100644 --- a/hi/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/hi/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/hi/docs/protocol/common_problems/index.html b/hi/docs/protocol/common_problems/index.html index 2d51a17d970..78b7a6158de 100644 --- a/hi/docs/protocol/common_problems/index.html +++ b/hi/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/hi/docs/protocol/port-forwarding/index.html b/hi/docs/protocol/port-forwarding/index.html index 2bd3e0a6573..1a4cb909a3a 100644 --- a/hi/docs/protocol/port-forwarding/index.html +++ b/hi/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/hi/docs/protocol/pulsar/index.html b/hi/docs/protocol/pulsar/index.html index 8937c361ad1..468e535e4a0 100644 --- a/hi/docs/protocol/pulsar/index.html +++ b/hi/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/hi/docs/protocol/security/index.html b/hi/docs/protocol/security/index.html index 30f2e78d717..bc089234735 100644 --- a/hi/docs/protocol/security/index.html +++ b/hi/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/hi/docs/protocol/substrate-cli/index.html b/hi/docs/protocol/substrate-cli/index.html index 5d2af6cc4a4..7b47eb35a5b 100644 --- a/hi/docs/protocol/substrate-cli/index.html +++ b/hi/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/hi/docs/protocol/timekeeping/index.html b/hi/docs/protocol/timekeeping/index.html index b91fc7ad728..8dc9dc3653a 100644 --- a/hi/docs/protocol/timekeeping/index.html +++ b/hi/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/hi/docs/protocol/wallets/polkadot/index.html b/hi/docs/protocol/wallets/polkadot/index.html index e4c417fc2ab..b6a634633fb 100644 --- a/hi/docs/protocol/wallets/polkadot/index.html +++ b/hi/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/hi/docs/protocol/wallets/subwallet/index.html b/hi/docs/protocol/wallets/subwallet/index.html index c4213f3fd93..29511192813 100644 --- a/hi/docs/protocol/wallets/subwallet/index.html +++ b/hi/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/hi/index.html b/hi/index.html index c79a21f9420..90ab445b184 100644 --- a/hi/index.html +++ b/hi/index.html @@ -7,13 +7,13 @@ - +

    कहीं से भी खेती करें

    स्पेयर डिस्क की प्रतिज्ञा करके एक किसान नोड चलाकर इनाम कमाएं। महंगी स्थापना या अग्रिम पूंजी की आवश्यकता नहीं है।

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/hi/markdown-page/index.html b/hi/markdown-page/index.html index 5f4db374d4b..0507660dc3b 100644 --- a/hi/markdown-page/index.html +++ b/hi/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/id/404.html b/id/404.html index 4a68e98c640..3f4e545689c 100644 --- a/id/404.html +++ b/id/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/id/assets/js/078f2bf0.a47c6d10.js b/id/assets/js/078f2bf0.3ad85629.js similarity index 73% rename from id/assets/js/078f2bf0.a47c6d10.js rename to id/assets/js/078f2bf0.3ad85629.js index 895f293d622..ab73145c276 100644 --- a/id/assets/js/078f2bf0.a47c6d10.js +++ b/id/assets/js/078f2bf0.3ad85629.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[1688],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/id/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/id/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/id/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/id/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/id/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[1688],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/id/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/id/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/id/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/id/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/id/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/id/assets/js/runtime~main.947122f9.js b/id/assets/js/runtime~main.8e870148.js similarity index 98% rename from id/assets/js/runtime~main.947122f9.js rename to id/assets/js/runtime~main.8e870148.js index 03f022a75eb..ae99fa78f56 100644 --- a/id/assets/js/runtime~main.947122f9.js +++ b/id/assets/js/runtime~main.8e870148.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({8:"bc662f07",53:"935f2afb",93:"8fb84586",433:"53be9ede",462:"a640302b",841:"e9060a4d",1102:"90531ec4",1270:"83382d4d",1397:"081120c7",1401:"a183fc6b",1593:"aef42751",1607:"da422476",1646:"fef3eff4",1688:"078f2bf0",2214:"38c0a67e",2226:"9669dd58",2318:"7fbeaa51",2491:"f67f6308",2833:"84eeb4c4",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3510:"753d1502",3585:"7c89945c",3696:"694b988f",3727:"a3c52027",3927:"9f21a6c1",3985:"c4be7ab9",3989:"0c8724e2",4248:"ecd94da8",4401:"2e96a20c",4415:"f0cbcbce",4520:"d7d1325e",4646:"f3a62fb0",4708:"d97f896d",4729:"709f6c63",4750:"17d65cfe",5017:"1e2a47dc",5198:"79b5627b",5427:"0dbc8f8f",5812:"54658e0a",5970:"6cb11803",6041:"907cac7b",6145:"c07a3e5e",6293:"18e2de52",6297:"089231d6",6391:"03a76425",6396:"7dfb520b",6612:"24415ec5",7042:"843d8016",7064:"48b449b2",7143:"06c017c9",7315:"3ea3f981",7370:"c09f4ff7",7414:"393be207",7493:"d0b5a714",7582:"9a4c1fa6",7685:"cf7cb029",7918:"17896441",7966:"47951cef",7978:"b5d5687a",8086:"b5cdfd04",8623:"bdb36afe",8738:"f344a807",9210:"728a4242",9461:"cf542c2d",9514:"1be78505",9600:"94537653",9641:"6b728641",9817:"14eb3368",9929:"f4480518"}[e]||e)+"."+{8:"168721c2",53:"7a1eb3bc",93:"96654d87",433:"fbcdc25d",462:"4e02b496",814:"dc8c3a26",841:"c5d63d42",1102:"516e7710",1270:"a082e343",1397:"90534802",1401:"9ebff7fb",1593:"1f30716b",1607:"c16df322",1646:"08a18868",1688:"a47c6d10",2214:"f7771ea0",2226:"291ce125",2318:"fa8b4455",2491:"cfc24137",2833:"682b56ac",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3510:"617fad28",3585:"73c97ab4",3696:"d05aeff3",3727:"3c728eb7",3927:"647ead83",3985:"14a33ee9",3989:"101778b8",4248:"c3caba3b",4401:"7bfa282a",4415:"2bb72720",4520:"b1066a59",4646:"78d9ea84",4708:"148ec009",4729:"df57cb6a",4750:"f06416f3",4972:"4a54fd4a",5017:"b93367db",5198:"7a32c329",5427:"db662d9b",5812:"72aaa934",5970:"ef695c89",6041:"83697750",6145:"73d919d2",6293:"d45a47c6",6297:"f81f38ee",6391:"6ec01579",6396:"86a8ee51",6612:"7e8e7cb6",7042:"a484743a",7064:"494c24d1",7143:"54ae3bd8",7315:"193e82b9",7370:"d055a64d",7414:"d6519706",7493:"76431b66",7582:"8cbadc85",7685:"be2ac618",7918:"e3da5265",7966:"388ecf38",7978:"6b086223",8086:"d57f6e19",8623:"4f847d21",8738:"ba147f9c",9210:"68b40777",9461:"f26d2762",9514:"478c02c6",9600:"7a392ba6",9641:"7335b15c",9817:"b7ea7ab7",9929:"ee697603"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/id/",r.gca=function(e){return e={17896441:"7918",94537653:"9600",bc662f07:"8","935f2afb":"53","8fb84586":"93","53be9ede":"433",a640302b:"462",e9060a4d:"841","90531ec4":"1102","83382d4d":"1270","081120c7":"1397",a183fc6b:"1401",aef42751:"1593",da422476:"1607",fef3eff4:"1646","078f2bf0":"1688","38c0a67e":"2214","9669dd58":"2226","7fbeaa51":"2318",f67f6308:"2491","84eeb4c4":"2833","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","753d1502":"3510","7c89945c":"3585","694b988f":"3696",a3c52027:"3727","9f21a6c1":"3927",c4be7ab9:"3985","0c8724e2":"3989",ecd94da8:"4248","2e96a20c":"4401",f0cbcbce:"4415",d7d1325e:"4520",f3a62fb0:"4646",d97f896d:"4708","709f6c63":"4729","17d65cfe":"4750","1e2a47dc":"5017","79b5627b":"5198","0dbc8f8f":"5427","54658e0a":"5812","6cb11803":"5970","907cac7b":"6041",c07a3e5e:"6145","18e2de52":"6293","089231d6":"6297","03a76425":"6391","7dfb520b":"6396","24415ec5":"6612","843d8016":"7042","48b449b2":"7064","06c017c9":"7143","3ea3f981":"7315",c09f4ff7:"7370","393be207":"7414",d0b5a714:"7493","9a4c1fa6":"7582",cf7cb029:"7685","47951cef":"7966",b5d5687a:"7978",b5cdfd04:"8086",bdb36afe:"8623",f344a807:"8738","728a4242":"9210",cf542c2d:"9461","1be78505":"9514","6b728641":"9641","14eb3368":"9817",f4480518:"9929"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({8:"bc662f07",53:"935f2afb",93:"8fb84586",433:"53be9ede",462:"a640302b",841:"e9060a4d",1102:"90531ec4",1270:"83382d4d",1397:"081120c7",1401:"a183fc6b",1593:"aef42751",1607:"da422476",1646:"fef3eff4",1688:"078f2bf0",2214:"38c0a67e",2226:"9669dd58",2318:"7fbeaa51",2491:"f67f6308",2833:"84eeb4c4",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3510:"753d1502",3585:"7c89945c",3696:"694b988f",3727:"a3c52027",3927:"9f21a6c1",3985:"c4be7ab9",3989:"0c8724e2",4248:"ecd94da8",4401:"2e96a20c",4415:"f0cbcbce",4520:"d7d1325e",4646:"f3a62fb0",4708:"d97f896d",4729:"709f6c63",4750:"17d65cfe",5017:"1e2a47dc",5198:"79b5627b",5427:"0dbc8f8f",5812:"54658e0a",5970:"6cb11803",6041:"907cac7b",6145:"c07a3e5e",6293:"18e2de52",6297:"089231d6",6391:"03a76425",6396:"7dfb520b",6612:"24415ec5",7042:"843d8016",7064:"48b449b2",7143:"06c017c9",7315:"3ea3f981",7370:"c09f4ff7",7414:"393be207",7493:"d0b5a714",7582:"9a4c1fa6",7685:"cf7cb029",7918:"17896441",7966:"47951cef",7978:"b5d5687a",8086:"b5cdfd04",8623:"bdb36afe",8738:"f344a807",9210:"728a4242",9461:"cf542c2d",9514:"1be78505",9600:"94537653",9641:"6b728641",9817:"14eb3368",9929:"f4480518"}[e]||e)+"."+{8:"168721c2",53:"7a1eb3bc",93:"96654d87",433:"fbcdc25d",462:"4e02b496",814:"dc8c3a26",841:"c5d63d42",1102:"516e7710",1270:"a082e343",1397:"90534802",1401:"9ebff7fb",1593:"1f30716b",1607:"c16df322",1646:"08a18868",1688:"3ad85629",2214:"f7771ea0",2226:"291ce125",2318:"fa8b4455",2491:"cfc24137",2833:"682b56ac",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3510:"617fad28",3585:"73c97ab4",3696:"d05aeff3",3727:"3c728eb7",3927:"647ead83",3985:"14a33ee9",3989:"101778b8",4248:"c3caba3b",4401:"7bfa282a",4415:"2bb72720",4520:"b1066a59",4646:"78d9ea84",4708:"148ec009",4729:"df57cb6a",4750:"f06416f3",4972:"4a54fd4a",5017:"b93367db",5198:"7a32c329",5427:"db662d9b",5812:"72aaa934",5970:"ef695c89",6041:"83697750",6145:"73d919d2",6293:"d45a47c6",6297:"f81f38ee",6391:"6ec01579",6396:"86a8ee51",6612:"7e8e7cb6",7042:"a484743a",7064:"494c24d1",7143:"54ae3bd8",7315:"193e82b9",7370:"d055a64d",7414:"d6519706",7493:"76431b66",7582:"8cbadc85",7685:"be2ac618",7918:"e3da5265",7966:"388ecf38",7978:"6b086223",8086:"d57f6e19",8623:"4f847d21",8738:"ba147f9c",9210:"68b40777",9461:"f26d2762",9514:"478c02c6",9600:"7a392ba6",9641:"7335b15c",9817:"b7ea7ab7",9929:"ee697603"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/id/",r.gca=function(e){return e={17896441:"7918",94537653:"9600",bc662f07:"8","935f2afb":"53","8fb84586":"93","53be9ede":"433",a640302b:"462",e9060a4d:"841","90531ec4":"1102","83382d4d":"1270","081120c7":"1397",a183fc6b:"1401",aef42751:"1593",da422476:"1607",fef3eff4:"1646","078f2bf0":"1688","38c0a67e":"2214","9669dd58":"2226","7fbeaa51":"2318",f67f6308:"2491","84eeb4c4":"2833","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","753d1502":"3510","7c89945c":"3585","694b988f":"3696",a3c52027:"3727","9f21a6c1":"3927",c4be7ab9:"3985","0c8724e2":"3989",ecd94da8:"4248","2e96a20c":"4401",f0cbcbce:"4415",d7d1325e:"4520",f3a62fb0:"4646",d97f896d:"4708","709f6c63":"4729","17d65cfe":"4750","1e2a47dc":"5017","79b5627b":"5198","0dbc8f8f":"5427","54658e0a":"5812","6cb11803":"5970","907cac7b":"6041",c07a3e5e:"6145","18e2de52":"6293","089231d6":"6297","03a76425":"6391","7dfb520b":"6396","24415ec5":"6612","843d8016":"7042","48b449b2":"7064","06c017c9":"7143","3ea3f981":"7315",c09f4ff7:"7370","393be207":"7414",d0b5a714:"7493","9a4c1fa6":"7582",cf7cb029:"7685","47951cef":"7966",b5d5687a:"7978",b5cdfd04:"8086",bdb36afe:"8623",f344a807:"8738","728a4242":"9210",cf542c2d:"9461","1be78505":"9514","6b728641":"9641","14eb3368":"9817",f4480518:"9929"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n - + - + \ No newline at end of file diff --git a/id/docs/category/developer-documentation/index.html b/id/docs/category/developer-documentation/index.html index 7e88c068462..6ef12e6309a 100644 --- a/id/docs/category/developer-documentation/index.html +++ b/id/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/id/docs/category/get-started-with-farming/index.html b/id/docs/category/get-started-with-farming/index.html index 3cf3ee2165b..7b1aab683fc 100644 --- a/id/docs/category/get-started-with-farming/index.html +++ b/id/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/id/docs/category/operators-and-staking/index.html b/id/docs/category/operators-and-staking/index.html index 8aaf09d2b62..21276052625 100644 --- a/id/docs/category/operators-and-staking/index.html +++ b/id/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/id/docs/category/wallets/index.html b/id/docs/category/wallets/index.html index 152978f4bdf..69d4065ac14 100644 --- a/id/docs/category/wallets/index.html +++ b/id/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/id/docs/community/CODE_OF_CONDUCT/index.html b/id/docs/community/CODE_OF_CONDUCT/index.html index 655de9c56a6..96131bae67a 100644 --- a/id/docs/community/CODE_OF_CONDUCT/index.html +++ b/id/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/id/docs/community/contribute/index.html b/id/docs/community/contribute/index.html index de51234afbb..cf3b4363de1 100644 --- a/id/docs/community/contribute/index.html +++ b/id/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/id/docs/community/index.html b/id/docs/community/index.html index ba76dde5314..f7760197f5f 100644 --- a/id/docs/community/index.html +++ b/id/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/id/docs/community/translate/index.html b/id/docs/community/translate/index.html index 1a03662cba5..60964e45dcc 100644 --- a/id/docs/community/translate/index.html +++ b/id/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/id/docs/developers/block_explorer/index.html b/id/docs/developers/block_explorer/index.html index 24151f812de..95ec070d54f 100644 --- a/id/docs/developers/block_explorer/index.html +++ b/id/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/id/docs/developers/faucet/index.html b/id/docs/developers/faucet/index.html index 1e091bee2b8..b798c20a7d4 100644 --- a/id/docs/developers/faucet/index.html +++ b/id/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/id/docs/developers/foundry_guide/index.html b/id/docs/developers/foundry_guide/index.html index c3033eb1782..4b8875c9d4f 100644 --- a/id/docs/developers/foundry_guide/index.html +++ b/id/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/id/docs/developers/general-information/index.html b/id/docs/developers/general-information/index.html index e93a7d505ed..4d920083078 100644 --- a/id/docs/developers/general-information/index.html +++ b/id/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/id/docs/developers/hardhat_guide/index.html b/id/docs/developers/hardhat_guide/index.html index 38cdcfaa164..d8f342bf3dc 100644 --- a/id/docs/developers/hardhat_guide/index.html +++ b/id/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/id/docs/developers/intro/index.html b/id/docs/developers/intro/index.html index 52addabad5d..9578329d500 100644 --- a/id/docs/developers/intro/index.html +++ b/id/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/id/docs/developers/local_development/index.html b/id/docs/developers/local_development/index.html index df661ba6609..6fba3f915e1 100644 --- a/id/docs/developers/local_development/index.html +++ b/id/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/id/docs/developers/quick_start/index.html b/id/docs/developers/quick_start/index.html index 7911db2b2e4..4b5f2854f3b 100644 --- a/id/docs/developers/quick_start/index.html +++ b/id/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/id/docs/developers/remix_guide/index.html b/id/docs/developers/remix_guide/index.html index 21a48a2898f..8c4b463bcc8 100644 --- a/id/docs/developers/remix_guide/index.html +++ b/id/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/id/docs/developers/setting-up-metamask/index.html b/id/docs/developers/setting-up-metamask/index.html index 5f96c5c6673..a0fa0e1fcb1 100644 --- a/id/docs/developers/setting-up-metamask/index.html +++ b/id/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/id/docs/intro/index.html b/id/docs/intro/index.html index 3ab85871bc7..a099a0b0abd 100644 --- a/id/docs/intro/index.html +++ b/id/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/id/docs/operators_and_staking/intro/index.html b/id/docs/operators_and_staking/intro/index.html index 2f090b25425..d687e4b66a2 100644 --- a/id/docs/operators_and_staking/intro/index.html +++ b/id/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/id/docs/operators_and_staking/operators/index.html b/id/docs/operators_and_staking/operators/index.html index 7c4248d0bc5..0fc0f4499d3 100644 --- a/id/docs/operators_and_staking/operators/index.html +++ b/id/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/id/docs/operators_and_staking/staking/index.html b/id/docs/operators_and_staking/staking/index.html index 8daed8e2c53..98851137835 100644 --- a/id/docs/operators_and_staking/staking/index.html +++ b/id/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/id/docs/pre-release/category/community/index.html b/id/docs/pre-release/category/community/index.html index c7ce5cf4337..7b64e8a4774 100644 --- a/id/docs/pre-release/category/community/index.html +++ b/id/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/id/docs/pre-release/category/developer-documentation/index.html b/id/docs/pre-release/category/developer-documentation/index.html index ef3a0ab7c3a..dc54cce50e8 100644 --- a/id/docs/pre-release/category/developer-documentation/index.html +++ b/id/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/id/docs/pre-release/category/get-started-with-farming/index.html b/id/docs/pre-release/category/get-started-with-farming/index.html index 467bd501f6b..5fa4e9f4bc5 100644 --- a/id/docs/pre-release/category/get-started-with-farming/index.html +++ b/id/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/id/docs/pre-release/category/operators-and-staking/index.html b/id/docs/pre-release/category/operators-and-staking/index.html index 40c49c64b3d..7e9e0031406 100644 --- a/id/docs/pre-release/category/operators-and-staking/index.html +++ b/id/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/id/docs/pre-release/category/wallets/index.html b/id/docs/pre-release/category/wallets/index.html index 3dd24f2e3d6..6cd402a5943 100644 --- a/id/docs/pre-release/category/wallets/index.html +++ b/id/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/id/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/id/docs/pre-release/community/CODE_OF_CONDUCT/index.html index ef4160ef539..e50fe43fd77 100644 --- a/id/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/id/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/id/docs/pre-release/community/contribute/index.html b/id/docs/pre-release/community/contribute/index.html index b0802e082fd..af81643f3e3 100644 --- a/id/docs/pre-release/community/contribute/index.html +++ b/id/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/id/docs/pre-release/community/index.html b/id/docs/pre-release/community/index.html index 999abffe473..8393ece51f1 100644 --- a/id/docs/pre-release/community/index.html +++ b/id/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/id/docs/pre-release/community/translate/index.html b/id/docs/pre-release/community/translate/index.html index 65dd7f459db..d18a508640d 100644 --- a/id/docs/pre-release/community/translate/index.html +++ b/id/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/id/docs/pre-release/developers/block_explorer/index.html b/id/docs/pre-release/developers/block_explorer/index.html index e20d9851a49..7cf3fcba58e 100644 --- a/id/docs/pre-release/developers/block_explorer/index.html +++ b/id/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/id/docs/pre-release/developers/faucet/index.html b/id/docs/pre-release/developers/faucet/index.html index 7af7ba1948c..5035275e7fa 100644 --- a/id/docs/pre-release/developers/faucet/index.html +++ b/id/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/id/docs/pre-release/developers/foundry_guide/index.html b/id/docs/pre-release/developers/foundry_guide/index.html index 8c8fab711d7..f9e9f6af60d 100644 --- a/id/docs/pre-release/developers/foundry_guide/index.html +++ b/id/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/id/docs/pre-release/developers/general-information/index.html b/id/docs/pre-release/developers/general-information/index.html index 8a33b9be24b..f91542dd81f 100644 --- a/id/docs/pre-release/developers/general-information/index.html +++ b/id/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/id/docs/pre-release/developers/hardhat_guide/index.html b/id/docs/pre-release/developers/hardhat_guide/index.html index d94e6dc2629..e6ded3f852d 100644 --- a/id/docs/pre-release/developers/hardhat_guide/index.html +++ b/id/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/id/docs/pre-release/developers/intro/index.html b/id/docs/pre-release/developers/intro/index.html index 2af4eb53ce1..397a383c23c 100644 --- a/id/docs/pre-release/developers/intro/index.html +++ b/id/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/id/docs/pre-release/developers/local_development/index.html b/id/docs/pre-release/developers/local_development/index.html index d49694fced2..f878fb5199d 100644 --- a/id/docs/pre-release/developers/local_development/index.html +++ b/id/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/id/docs/pre-release/developers/quick_start/index.html b/id/docs/pre-release/developers/quick_start/index.html index 7d0069671ae..a5972eedb4c 100644 --- a/id/docs/pre-release/developers/quick_start/index.html +++ b/id/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/id/docs/pre-release/developers/remix_guide/index.html b/id/docs/pre-release/developers/remix_guide/index.html index ce922ec7b9d..9d612499671 100644 --- a/id/docs/pre-release/developers/remix_guide/index.html +++ b/id/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/id/docs/pre-release/developers/setting-up-metamask/index.html b/id/docs/pre-release/developers/setting-up-metamask/index.html index 88cabc43d7c..7cb6a53283e 100644 --- a/id/docs/pre-release/developers/setting-up-metamask/index.html +++ b/id/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/id/docs/pre-release/intro/index.html b/id/docs/pre-release/intro/index.html index 5108f23eee2..ac1d28f4d83 100644 --- a/id/docs/pre-release/intro/index.html +++ b/id/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/id/docs/pre-release/operators_and_staking/intro/index.html b/id/docs/pre-release/operators_and_staking/intro/index.html index abe29202f6e..1b698d9e29e 100644 --- a/id/docs/pre-release/operators_and_staking/intro/index.html +++ b/id/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/id/docs/pre-release/operators_and_staking/operators/index.html b/id/docs/pre-release/operators_and_staking/operators/index.html index 062aed22231..25122e0df0c 100644 --- a/id/docs/pre-release/operators_and_staking/operators/index.html +++ b/id/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/id/docs/pre-release/operators_and_staking/staking/index.html b/id/docs/pre-release/operators_and_staking/staking/index.html index a44bced50c4..61c98a86a0b 100644 --- a/id/docs/pre-release/operators_and_staking/staking/index.html +++ b/id/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/id/docs/pre-release/protocol/common_problems/index.html b/id/docs/pre-release/protocol/common_problems/index.html index eeb9a94fae3..438b8fc3036 100644 --- a/id/docs/pre-release/protocol/common_problems/index.html +++ b/id/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/id/docs/pre-release/protocol/port-forwarding/index.html b/id/docs/pre-release/protocol/port-forwarding/index.html index 96cb1a277a4..95efef4846d 100644 --- a/id/docs/pre-release/protocol/port-forwarding/index.html +++ b/id/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/id/docs/pre-release/protocol/pulsar/index.html b/id/docs/pre-release/protocol/pulsar/index.html index 367dd1f5a11..fc842b70209 100644 --- a/id/docs/pre-release/protocol/pulsar/index.html +++ b/id/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/id/docs/pre-release/protocol/security/index.html b/id/docs/pre-release/protocol/security/index.html index ff5b05feb69..3863c5bf297 100644 --- a/id/docs/pre-release/protocol/security/index.html +++ b/id/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/id/docs/pre-release/protocol/substrate-cli/index.html b/id/docs/pre-release/protocol/substrate-cli/index.html index 59dcd25e6ec..74c5abe208c 100644 --- a/id/docs/pre-release/protocol/substrate-cli/index.html +++ b/id/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/id/docs/pre-release/protocol/timekeeping/index.html b/id/docs/pre-release/protocol/timekeeping/index.html index 324a5f90f24..e255390af9c 100644 --- a/id/docs/pre-release/protocol/timekeeping/index.html +++ b/id/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/id/docs/pre-release/protocol/wallets/polkadot/index.html b/id/docs/pre-release/protocol/wallets/polkadot/index.html index 68f2bbc6936..dec2201ba05 100644 --- a/id/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/id/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/id/docs/pre-release/protocol/wallets/subwallet/index.html b/id/docs/pre-release/protocol/wallets/subwallet/index.html index c51474b4789..e24cf0aa170 100644 --- a/id/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/id/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/id/docs/protocol/common_problems/index.html b/id/docs/protocol/common_problems/index.html index 2de50115c57..c6c67ba1b9a 100644 --- a/id/docs/protocol/common_problems/index.html +++ b/id/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/id/docs/protocol/port-forwarding/index.html b/id/docs/protocol/port-forwarding/index.html index 7436b7c717d..9d6dbf51377 100644 --- a/id/docs/protocol/port-forwarding/index.html +++ b/id/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/id/docs/protocol/pulsar/index.html b/id/docs/protocol/pulsar/index.html index 0901d2f8240..16497746b63 100644 --- a/id/docs/protocol/pulsar/index.html +++ b/id/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/id/docs/protocol/security/index.html b/id/docs/protocol/security/index.html index 5b59c1a06fa..5976a892e42 100644 --- a/id/docs/protocol/security/index.html +++ b/id/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/id/docs/protocol/substrate-cli/index.html b/id/docs/protocol/substrate-cli/index.html index 20e611061e5..b9f90b7998f 100644 --- a/id/docs/protocol/substrate-cli/index.html +++ b/id/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/id/docs/protocol/timekeeping/index.html b/id/docs/protocol/timekeeping/index.html index 289d54b3967..4248a80324a 100644 --- a/id/docs/protocol/timekeeping/index.html +++ b/id/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/id/docs/protocol/wallets/polkadot/index.html b/id/docs/protocol/wallets/polkadot/index.html index e19fa27f902..d6804c2b75e 100644 --- a/id/docs/protocol/wallets/polkadot/index.html +++ b/id/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/id/docs/protocol/wallets/subwallet/index.html b/id/docs/protocol/wallets/subwallet/index.html index 3c8ec3f6988..ac831c1a27b 100644 --- a/id/docs/protocol/wallets/subwallet/index.html +++ b/id/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/id/index.html b/id/index.html index 92f2efbdb01..76793c0de11 100644 --- a/id/index.html +++ b/id/index.html @@ -7,13 +7,13 @@ - +

    Berladang dari Mana Saja

    Dapatkan hadiah dengan menjalankan simpul petani dengan menjanjikan disk sisa. Tidak diperlukan pengaturan mahal atau modal awal.

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/id/markdown-page/index.html b/id/markdown-page/index.html index 5114b6fdc7b..21fc32b619e 100644 --- a/id/markdown-page/index.html +++ b/id/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/index.html b/index.html index 2b8eeb3c313..26798f7983d 100644 --- a/index.html +++ b/index.html @@ -7,13 +7,13 @@ - +

    Farm from Anywhere

    Earn rewards by running a farmer node by pledging spare disk. No expensive setup or upfront capital is required.

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/it/404.html b/it/404.html index c4a112476f7..7bb07649c32 100644 --- a/it/404.html +++ b/it/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/it/assets/js/87a7f739.646600e2.js b/it/assets/js/87a7f739.00522889.js similarity index 73% rename from it/assets/js/87a7f739.646600e2.js rename to it/assets/js/87a7f739.00522889.js index 6a40d1e2b25..cf549ce3659 100644 --- a/it/assets/js/87a7f739.646600e2.js +++ b/it/assets/js/87a7f739.00522889.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[4470],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/it/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/it/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/it/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/it/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/it/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[4470],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/it/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/it/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/it/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/it/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/it/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/it/assets/js/runtime~main.c3a498e0.js b/it/assets/js/runtime~main.4521b495.js similarity index 98% rename from it/assets/js/runtime~main.c3a498e0.js rename to it/assets/js/runtime~main.4521b495.js index b8d45210138..a9cdc4c3919 100644 --- a/it/assets/js/runtime~main.c3a498e0.js +++ b/it/assets/js/runtime~main.4521b495.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,c,t,d={},r={};function b(e){var a=r[e];if(void 0!==a)return a.exports;var f=r[e]={exports:{}};return d[e].call(f.exports,f,f.exports,b),f.exports}b.m=d,e=[],b.O=(a,f,c,t)=>{if(!f){var d=1/0;for(i=0;i=t)&&Object.keys(b.O).every((e=>b.O[e](f[o])))?f.splice(o--,1):(r=!1,t0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[f,c,t]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var d={};a=a||[null,f({}),f([]),f(f)];for(var r=2&c&&e;"object"==typeof r&&!~a.indexOf(r);r=f(r))Object.getOwnPropertyNames(r).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,b.d(t,d),t},b.d=(e,a)=>{for(var f in a)b.o(a,f)&&!b.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,f)=>(b.f[f](e,a),a)),[])),b.u=e=>"assets/js/"+({24:"92f139ea",53:"935f2afb",64:"3e0d77c5",659:"8d42f575",748:"0cb031dc",880:"e76fa4a5",885:"3aaf3735",1131:"3c9296e4",1137:"c1ebe8a5",1246:"d1192996",1311:"c1221f04",1428:"088c8207",1468:"442fb736",2021:"4e032ed2",2065:"86ce4828",2087:"787dd18c",2245:"dcaa1a88",2263:"95def682",2444:"5d5f41a9",2503:"c2fedbea",2559:"0664f76b",2561:"b1bcf1ca",2562:"7d9d232e",2645:"066ea9ec",2658:"3c7084af",2719:"29432c27",2850:"349b8415",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3626:"87d3874e",3669:"621849bf",4068:"97d89b3b",4225:"44496cba",4470:"87a7f739",4622:"b857413e",4741:"5f44f3e5",4756:"eab78895",5069:"afd3fc4d",5089:"19dfb61b",5213:"a3839a71",5482:"c791c92a",5786:"a2be85b1",6070:"85494003",6265:"8c1665bf",6318:"49b07f50",6679:"5694e470",6725:"34c7a1c5",6782:"068979ec",7296:"ee9a60f7",7370:"c09f4ff7",7380:"94af91ca",7414:"393be207",7558:"98a80f15",7578:"af39383b",7721:"9e2cc3a3",7918:"17896441",8008:"88ce107a",8032:"9db1ed5a",8171:"7af0ba1e",8230:"ba21baaf",8422:"ec15eeca",8629:"7494a538",8635:"2b129001",8759:"aa4f83fc",9001:"79cc71c7",9514:"1be78505",9530:"1b1665e2",9783:"983d0f4a",9817:"14eb3368",9884:"e3c225f4"}[e]||e)+"."+{24:"8e27f6d4",53:"4b0b91e2",64:"45aa4fff",659:"bbee3cce",748:"0bf01848",814:"dc8c3a26",880:"b558407d",885:"686ce0f1",1131:"c91ef990",1137:"4fed9eaa",1246:"c3e1ef6f",1311:"2b2087f1",1428:"bc577e7b",1468:"40cd4797",2021:"603c2d2c",2065:"2c884698",2087:"a35f5dbf",2245:"27843954",2263:"32eaceee",2444:"9a2dbdcc",2503:"127d69bb",2559:"ab979e01",2561:"3af72af7",2562:"27d270b5",2645:"a191bbdf",2658:"07317c14",2719:"8ecc59c5",2850:"1c87d139",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3626:"ba4d5643",3669:"1fe43f72",4068:"b67dc05c",4225:"9c861d00",4470:"646600e2",4622:"02972de8",4741:"b6f9b433",4756:"63811cfd",4972:"4a54fd4a",5069:"0b05f2a1",5089:"3a1a32ae",5213:"fe90ee08",5482:"cba995ff",5786:"b511669a",6070:"5d18c267",6265:"ddb50015",6318:"7df30595",6679:"03f1d01a",6725:"d922f24a",6782:"e9f55468",7296:"01e45547",7370:"87393cfc",7380:"35ad9b77",7414:"f9f4e52e",7558:"3b13d68f",7578:"77c0d91c",7721:"06dcc162",7918:"e3da5265",8008:"33c81a56",8032:"972c6103",8171:"6397cf76",8230:"8e8e4d13",8422:"01538fde",8629:"9b85b457",8635:"069c5994",8759:"31823381",9001:"b490df94",9514:"478c02c6",9530:"f49b1735",9783:"3811f875",9817:"b7ea7ab7",9884:"ba2e7ce3"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},t="portal:",b.l=(e,a,f,d)=>{if(c[e])c[e].push(a);else{var r,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(s);var t=c[e];if(delete c[e],r.parentNode&&r.parentNode.removeChild(r),t&&t.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=l.bind(null,r.onerror),r.onload=l.bind(null,r.onload),o&&document.head.appendChild(r)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/it/",b.gca=function(e){return e={17896441:"7918",85494003:"6070","92f139ea":"24","935f2afb":"53","3e0d77c5":"64","8d42f575":"659","0cb031dc":"748",e76fa4a5:"880","3aaf3735":"885","3c9296e4":"1131",c1ebe8a5:"1137",d1192996:"1246",c1221f04:"1311","088c8207":"1428","442fb736":"1468","4e032ed2":"2021","86ce4828":"2065","787dd18c":"2087",dcaa1a88:"2245","95def682":"2263","5d5f41a9":"2444",c2fedbea:"2503","0664f76b":"2559",b1bcf1ca:"2561","7d9d232e":"2562","066ea9ec":"2645","3c7084af":"2658","29432c27":"2719","349b8415":"2850","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","87d3874e":"3626","621849bf":"3669","97d89b3b":"4068","44496cba":"4225","87a7f739":"4470",b857413e:"4622","5f44f3e5":"4741",eab78895:"4756",afd3fc4d:"5069","19dfb61b":"5089",a3839a71:"5213",c791c92a:"5482",a2be85b1:"5786","8c1665bf":"6265","49b07f50":"6318","5694e470":"6679","34c7a1c5":"6725","068979ec":"6782",ee9a60f7:"7296",c09f4ff7:"7370","94af91ca":"7380","393be207":"7414","98a80f15":"7558",af39383b:"7578","9e2cc3a3":"7721","88ce107a":"8008","9db1ed5a":"8032","7af0ba1e":"8171",ba21baaf:"8230",ec15eeca:"8422","7494a538":"8629","2b129001":"8635",aa4f83fc:"8759","79cc71c7":"9001","1be78505":"9514","1b1665e2":"9530","983d0f4a":"9783","14eb3368":"9817",e3c225f4:"9884"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(a,f)=>{var c=b.o(e,a)?e[a]:void 0;if(0!==c)if(c)f.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var t=new Promise(((f,t)=>c=e[a]=[f,t]));f.push(c[2]=t);var d=b.p+b.u(a),r=new Error;b.l(d,(f=>{if(b.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var t=f&&("load"===f.type?"missing":f.type),d=f&&f.target&&f.target.src;r.message="Loading chunk "+a+" failed.\n("+t+": "+d+")",r.name="ChunkLoadError",r.type=t,r.request=d,c[1](r)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,f)=>{var c,t,d=f[0],r=f[1],o=f[2],n=0;if(d.some((a=>0!==e[a]))){for(c in r)b.o(r,c)&&(b.m[c]=r[c]);if(o)var i=o(b)}for(a&&a(f);n{"use strict";var e,a,f,c,t,d={},r={};function b(e){var a=r[e];if(void 0!==a)return a.exports;var f=r[e]={exports:{}};return d[e].call(f.exports,f,f.exports,b),f.exports}b.m=d,e=[],b.O=(a,f,c,t)=>{if(!f){var d=1/0;for(i=0;i=t)&&Object.keys(b.O).every((e=>b.O[e](f[o])))?f.splice(o--,1):(r=!1,t0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[f,c,t]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var d={};a=a||[null,f({}),f([]),f(f)];for(var r=2&c&&e;"object"==typeof r&&!~a.indexOf(r);r=f(r))Object.getOwnPropertyNames(r).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,b.d(t,d),t},b.d=(e,a)=>{for(var f in a)b.o(a,f)&&!b.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,f)=>(b.f[f](e,a),a)),[])),b.u=e=>"assets/js/"+({24:"92f139ea",53:"935f2afb",64:"3e0d77c5",659:"8d42f575",748:"0cb031dc",880:"e76fa4a5",885:"3aaf3735",1131:"3c9296e4",1137:"c1ebe8a5",1246:"d1192996",1311:"c1221f04",1428:"088c8207",1468:"442fb736",2021:"4e032ed2",2065:"86ce4828",2087:"787dd18c",2245:"dcaa1a88",2263:"95def682",2444:"5d5f41a9",2503:"c2fedbea",2559:"0664f76b",2561:"b1bcf1ca",2562:"7d9d232e",2645:"066ea9ec",2658:"3c7084af",2719:"29432c27",2850:"349b8415",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3626:"87d3874e",3669:"621849bf",4068:"97d89b3b",4225:"44496cba",4470:"87a7f739",4622:"b857413e",4741:"5f44f3e5",4756:"eab78895",5069:"afd3fc4d",5089:"19dfb61b",5213:"a3839a71",5482:"c791c92a",5786:"a2be85b1",6070:"85494003",6265:"8c1665bf",6318:"49b07f50",6679:"5694e470",6725:"34c7a1c5",6782:"068979ec",7296:"ee9a60f7",7370:"c09f4ff7",7380:"94af91ca",7414:"393be207",7558:"98a80f15",7578:"af39383b",7721:"9e2cc3a3",7918:"17896441",8008:"88ce107a",8032:"9db1ed5a",8171:"7af0ba1e",8230:"ba21baaf",8422:"ec15eeca",8629:"7494a538",8635:"2b129001",8759:"aa4f83fc",9001:"79cc71c7",9514:"1be78505",9530:"1b1665e2",9783:"983d0f4a",9817:"14eb3368",9884:"e3c225f4"}[e]||e)+"."+{24:"8e27f6d4",53:"4b0b91e2",64:"45aa4fff",659:"bbee3cce",748:"0bf01848",814:"dc8c3a26",880:"b558407d",885:"686ce0f1",1131:"c91ef990",1137:"4fed9eaa",1246:"c3e1ef6f",1311:"2b2087f1",1428:"bc577e7b",1468:"40cd4797",2021:"603c2d2c",2065:"2c884698",2087:"a35f5dbf",2245:"27843954",2263:"32eaceee",2444:"9a2dbdcc",2503:"127d69bb",2559:"ab979e01",2561:"3af72af7",2562:"27d270b5",2645:"a191bbdf",2658:"07317c14",2719:"8ecc59c5",2850:"1c87d139",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3626:"ba4d5643",3669:"1fe43f72",4068:"b67dc05c",4225:"9c861d00",4470:"00522889",4622:"02972de8",4741:"b6f9b433",4756:"63811cfd",4972:"4a54fd4a",5069:"0b05f2a1",5089:"3a1a32ae",5213:"fe90ee08",5482:"cba995ff",5786:"b511669a",6070:"5d18c267",6265:"ddb50015",6318:"7df30595",6679:"03f1d01a",6725:"d922f24a",6782:"e9f55468",7296:"01e45547",7370:"87393cfc",7380:"35ad9b77",7414:"f9f4e52e",7558:"3b13d68f",7578:"77c0d91c",7721:"06dcc162",7918:"e3da5265",8008:"33c81a56",8032:"972c6103",8171:"6397cf76",8230:"8e8e4d13",8422:"01538fde",8629:"9b85b457",8635:"069c5994",8759:"31823381",9001:"b490df94",9514:"478c02c6",9530:"f49b1735",9783:"3811f875",9817:"b7ea7ab7",9884:"ba2e7ce3"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},t="portal:",b.l=(e,a,f,d)=>{if(c[e])c[e].push(a);else{var r,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(s);var t=c[e];if(delete c[e],r.parentNode&&r.parentNode.removeChild(r),t&&t.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=l.bind(null,r.onerror),r.onload=l.bind(null,r.onload),o&&document.head.appendChild(r)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/it/",b.gca=function(e){return e={17896441:"7918",85494003:"6070","92f139ea":"24","935f2afb":"53","3e0d77c5":"64","8d42f575":"659","0cb031dc":"748",e76fa4a5:"880","3aaf3735":"885","3c9296e4":"1131",c1ebe8a5:"1137",d1192996:"1246",c1221f04:"1311","088c8207":"1428","442fb736":"1468","4e032ed2":"2021","86ce4828":"2065","787dd18c":"2087",dcaa1a88:"2245","95def682":"2263","5d5f41a9":"2444",c2fedbea:"2503","0664f76b":"2559",b1bcf1ca:"2561","7d9d232e":"2562","066ea9ec":"2645","3c7084af":"2658","29432c27":"2719","349b8415":"2850","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","87d3874e":"3626","621849bf":"3669","97d89b3b":"4068","44496cba":"4225","87a7f739":"4470",b857413e:"4622","5f44f3e5":"4741",eab78895:"4756",afd3fc4d:"5069","19dfb61b":"5089",a3839a71:"5213",c791c92a:"5482",a2be85b1:"5786","8c1665bf":"6265","49b07f50":"6318","5694e470":"6679","34c7a1c5":"6725","068979ec":"6782",ee9a60f7:"7296",c09f4ff7:"7370","94af91ca":"7380","393be207":"7414","98a80f15":"7558",af39383b:"7578","9e2cc3a3":"7721","88ce107a":"8008","9db1ed5a":"8032","7af0ba1e":"8171",ba21baaf:"8230",ec15eeca:"8422","7494a538":"8629","2b129001":"8635",aa4f83fc:"8759","79cc71c7":"9001","1be78505":"9514","1b1665e2":"9530","983d0f4a":"9783","14eb3368":"9817",e3c225f4:"9884"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(a,f)=>{var c=b.o(e,a)?e[a]:void 0;if(0!==c)if(c)f.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var t=new Promise(((f,t)=>c=e[a]=[f,t]));f.push(c[2]=t);var d=b.p+b.u(a),r=new Error;b.l(d,(f=>{if(b.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var t=f&&("load"===f.type?"missing":f.type),d=f&&f.target&&f.target.src;r.message="Loading chunk "+a+" failed.\n("+t+": "+d+")",r.name="ChunkLoadError",r.type=t,r.request=d,c[1](r)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,f)=>{var c,t,d=f[0],r=f[1],o=f[2],n=0;if(d.some((a=>0!==e[a]))){for(c in r)b.o(r,c)&&(b.m[c]=r[c]);if(o)var i=o(b)}for(a&&a(f);n - + - + \ No newline at end of file diff --git a/it/docs/category/developer-documentation/index.html b/it/docs/category/developer-documentation/index.html index f48f23e6587..0db5e27b2e2 100644 --- a/it/docs/category/developer-documentation/index.html +++ b/it/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/it/docs/category/get-started-with-farming/index.html b/it/docs/category/get-started-with-farming/index.html index dc77f0f9ef1..1c5725ac559 100644 --- a/it/docs/category/get-started-with-farming/index.html +++ b/it/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/it/docs/category/operators-and-staking/index.html b/it/docs/category/operators-and-staking/index.html index 417c4205f32..892e83c01d2 100644 --- a/it/docs/category/operators-and-staking/index.html +++ b/it/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/it/docs/category/wallets/index.html b/it/docs/category/wallets/index.html index 75750fc9b46..cf405e04d03 100644 --- a/it/docs/category/wallets/index.html +++ b/it/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/it/docs/community/CODE_OF_CONDUCT/index.html b/it/docs/community/CODE_OF_CONDUCT/index.html index 65af73010c1..ffef27a05a3 100644 --- a/it/docs/community/CODE_OF_CONDUCT/index.html +++ b/it/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/it/docs/community/contribute/index.html b/it/docs/community/contribute/index.html index 4d15ccd3292..b3de4dd4882 100644 --- a/it/docs/community/contribute/index.html +++ b/it/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/it/docs/community/index.html b/it/docs/community/index.html index 1f15bc85fff..3f8e8b76448 100644 --- a/it/docs/community/index.html +++ b/it/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/it/docs/community/translate/index.html b/it/docs/community/translate/index.html index 236792a5758..874f0bbf018 100644 --- a/it/docs/community/translate/index.html +++ b/it/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/it/docs/developers/block_explorer/index.html b/it/docs/developers/block_explorer/index.html index 8d6f86ba014..50b8b268319 100644 --- a/it/docs/developers/block_explorer/index.html +++ b/it/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/it/docs/developers/faucet/index.html b/it/docs/developers/faucet/index.html index 015c954e97d..e8218751f60 100644 --- a/it/docs/developers/faucet/index.html +++ b/it/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/it/docs/developers/foundry_guide/index.html b/it/docs/developers/foundry_guide/index.html index 1fd7c2be593..906c7c3100a 100644 --- a/it/docs/developers/foundry_guide/index.html +++ b/it/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/it/docs/developers/general-information/index.html b/it/docs/developers/general-information/index.html index d0276be03f4..e16347bf906 100644 --- a/it/docs/developers/general-information/index.html +++ b/it/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/it/docs/developers/hardhat_guide/index.html b/it/docs/developers/hardhat_guide/index.html index 276f66d8ccd..b53b3f3b138 100644 --- a/it/docs/developers/hardhat_guide/index.html +++ b/it/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/it/docs/developers/intro/index.html b/it/docs/developers/intro/index.html index a766bf1438c..8cd36513dc2 100644 --- a/it/docs/developers/intro/index.html +++ b/it/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/it/docs/developers/local_development/index.html b/it/docs/developers/local_development/index.html index 7fd367b12aa..afd28a43b29 100644 --- a/it/docs/developers/local_development/index.html +++ b/it/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/it/docs/developers/quick_start/index.html b/it/docs/developers/quick_start/index.html index 2970229f1d3..feb7c22ca34 100644 --- a/it/docs/developers/quick_start/index.html +++ b/it/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/it/docs/developers/remix_guide/index.html b/it/docs/developers/remix_guide/index.html index 0e8a394f7f4..199c4835c81 100644 --- a/it/docs/developers/remix_guide/index.html +++ b/it/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/it/docs/developers/setting-up-metamask/index.html b/it/docs/developers/setting-up-metamask/index.html index d38dc93cf8e..775da1cb9a2 100644 --- a/it/docs/developers/setting-up-metamask/index.html +++ b/it/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/it/docs/intro/index.html b/it/docs/intro/index.html index d7951919bd7..ce9229e1103 100644 --- a/it/docs/intro/index.html +++ b/it/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/it/docs/operators_and_staking/intro/index.html b/it/docs/operators_and_staking/intro/index.html index 21c2543b581..afb4dd717bc 100644 --- a/it/docs/operators_and_staking/intro/index.html +++ b/it/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/it/docs/operators_and_staking/operators/index.html b/it/docs/operators_and_staking/operators/index.html index 320990802a3..c5cedc00ac9 100644 --- a/it/docs/operators_and_staking/operators/index.html +++ b/it/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/it/docs/operators_and_staking/staking/index.html b/it/docs/operators_and_staking/staking/index.html index 18a69840b82..add9f5a95d8 100644 --- a/it/docs/operators_and_staking/staking/index.html +++ b/it/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/it/docs/pre-release/category/community/index.html b/it/docs/pre-release/category/community/index.html index aa777b80581..8f62f3fe9c5 100644 --- a/it/docs/pre-release/category/community/index.html +++ b/it/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/it/docs/pre-release/category/developer-documentation/index.html b/it/docs/pre-release/category/developer-documentation/index.html index 2b3fb1c7838..7f21b45a6b4 100644 --- a/it/docs/pre-release/category/developer-documentation/index.html +++ b/it/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/it/docs/pre-release/category/get-started-with-farming/index.html b/it/docs/pre-release/category/get-started-with-farming/index.html index 1aeb525abaa..9ba69cebd24 100644 --- a/it/docs/pre-release/category/get-started-with-farming/index.html +++ b/it/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/it/docs/pre-release/category/operators-and-staking/index.html b/it/docs/pre-release/category/operators-and-staking/index.html index f10494403c6..2f6d4fa5c0b 100644 --- a/it/docs/pre-release/category/operators-and-staking/index.html +++ b/it/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/it/docs/pre-release/category/wallets/index.html b/it/docs/pre-release/category/wallets/index.html index 0aeb49f2d8f..6e2a8a5f0bd 100644 --- a/it/docs/pre-release/category/wallets/index.html +++ b/it/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/it/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/it/docs/pre-release/community/CODE_OF_CONDUCT/index.html index 116b02e8b28..3c2711f55d4 100644 --- a/it/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/it/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/it/docs/pre-release/community/contribute/index.html b/it/docs/pre-release/community/contribute/index.html index a9d86a33e73..2cc83228870 100644 --- a/it/docs/pre-release/community/contribute/index.html +++ b/it/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/it/docs/pre-release/community/index.html b/it/docs/pre-release/community/index.html index b0413279ba5..917f8e2dcd4 100644 --- a/it/docs/pre-release/community/index.html +++ b/it/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/it/docs/pre-release/community/translate/index.html b/it/docs/pre-release/community/translate/index.html index 41bf634e114..3d84acc6874 100644 --- a/it/docs/pre-release/community/translate/index.html +++ b/it/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/it/docs/pre-release/developers/block_explorer/index.html b/it/docs/pre-release/developers/block_explorer/index.html index 92d30cee08c..c30e151eb55 100644 --- a/it/docs/pre-release/developers/block_explorer/index.html +++ b/it/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/it/docs/pre-release/developers/faucet/index.html b/it/docs/pre-release/developers/faucet/index.html index 2f2fca498f7..121dccd8cb9 100644 --- a/it/docs/pre-release/developers/faucet/index.html +++ b/it/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/it/docs/pre-release/developers/foundry_guide/index.html b/it/docs/pre-release/developers/foundry_guide/index.html index 0f15cb02070..0b26e10bf81 100644 --- a/it/docs/pre-release/developers/foundry_guide/index.html +++ b/it/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/it/docs/pre-release/developers/general-information/index.html b/it/docs/pre-release/developers/general-information/index.html index db2610c8222..b56dc2ff235 100644 --- a/it/docs/pre-release/developers/general-information/index.html +++ b/it/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/it/docs/pre-release/developers/hardhat_guide/index.html b/it/docs/pre-release/developers/hardhat_guide/index.html index bece213ca82..c38aca4421b 100644 --- a/it/docs/pre-release/developers/hardhat_guide/index.html +++ b/it/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/it/docs/pre-release/developers/intro/index.html b/it/docs/pre-release/developers/intro/index.html index 569e5be41ec..ceeed2ba8e4 100644 --- a/it/docs/pre-release/developers/intro/index.html +++ b/it/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/it/docs/pre-release/developers/local_development/index.html b/it/docs/pre-release/developers/local_development/index.html index 28c11e3900d..09b32f64c67 100644 --- a/it/docs/pre-release/developers/local_development/index.html +++ b/it/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/it/docs/pre-release/developers/quick_start/index.html b/it/docs/pre-release/developers/quick_start/index.html index 9a3ae033609..5f258a05669 100644 --- a/it/docs/pre-release/developers/quick_start/index.html +++ b/it/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/it/docs/pre-release/developers/remix_guide/index.html b/it/docs/pre-release/developers/remix_guide/index.html index 89bc9a52bbf..1a649587aa5 100644 --- a/it/docs/pre-release/developers/remix_guide/index.html +++ b/it/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/it/docs/pre-release/developers/setting-up-metamask/index.html b/it/docs/pre-release/developers/setting-up-metamask/index.html index ee522a73830..c7cecbdad32 100644 --- a/it/docs/pre-release/developers/setting-up-metamask/index.html +++ b/it/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/it/docs/pre-release/intro/index.html b/it/docs/pre-release/intro/index.html index 9f106209767..4ed7c0f1e54 100644 --- a/it/docs/pre-release/intro/index.html +++ b/it/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/it/docs/pre-release/operators_and_staking/intro/index.html b/it/docs/pre-release/operators_and_staking/intro/index.html index 6131fc9d320..42a6d16a599 100644 --- a/it/docs/pre-release/operators_and_staking/intro/index.html +++ b/it/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/it/docs/pre-release/operators_and_staking/operators/index.html b/it/docs/pre-release/operators_and_staking/operators/index.html index 378d3256b0d..21572199295 100644 --- a/it/docs/pre-release/operators_and_staking/operators/index.html +++ b/it/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/it/docs/pre-release/operators_and_staking/staking/index.html b/it/docs/pre-release/operators_and_staking/staking/index.html index 368cf5839bc..aabcbce54a5 100644 --- a/it/docs/pre-release/operators_and_staking/staking/index.html +++ b/it/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/it/docs/pre-release/protocol/common_problems/index.html b/it/docs/pre-release/protocol/common_problems/index.html index b9d23f5f6c0..757fcedfc94 100644 --- a/it/docs/pre-release/protocol/common_problems/index.html +++ b/it/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/it/docs/pre-release/protocol/port-forwarding/index.html b/it/docs/pre-release/protocol/port-forwarding/index.html index 12c9f3c7c5b..b858102c719 100644 --- a/it/docs/pre-release/protocol/port-forwarding/index.html +++ b/it/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/it/docs/pre-release/protocol/pulsar/index.html b/it/docs/pre-release/protocol/pulsar/index.html index daaa793e891..193af3e0ca4 100644 --- a/it/docs/pre-release/protocol/pulsar/index.html +++ b/it/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/it/docs/pre-release/protocol/security/index.html b/it/docs/pre-release/protocol/security/index.html index 570757c6daa..21488492cb2 100644 --- a/it/docs/pre-release/protocol/security/index.html +++ b/it/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/it/docs/pre-release/protocol/substrate-cli/index.html b/it/docs/pre-release/protocol/substrate-cli/index.html index 8771472e6ae..43e9947f696 100644 --- a/it/docs/pre-release/protocol/substrate-cli/index.html +++ b/it/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/it/docs/pre-release/protocol/timekeeping/index.html b/it/docs/pre-release/protocol/timekeeping/index.html index 198ad212e5c..a10de951eca 100644 --- a/it/docs/pre-release/protocol/timekeeping/index.html +++ b/it/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/it/docs/pre-release/protocol/wallets/polkadot/index.html b/it/docs/pre-release/protocol/wallets/polkadot/index.html index 0d804d4a2b2..112eca93db1 100644 --- a/it/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/it/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/it/docs/pre-release/protocol/wallets/subwallet/index.html b/it/docs/pre-release/protocol/wallets/subwallet/index.html index 44c49a8af27..28c96849e82 100644 --- a/it/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/it/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/it/docs/protocol/common_problems/index.html b/it/docs/protocol/common_problems/index.html index a5919547451..1dfabad12ad 100644 --- a/it/docs/protocol/common_problems/index.html +++ b/it/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/it/docs/protocol/port-forwarding/index.html b/it/docs/protocol/port-forwarding/index.html index 485ecf08537..58cdbbc58c4 100644 --- a/it/docs/protocol/port-forwarding/index.html +++ b/it/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/it/docs/protocol/pulsar/index.html b/it/docs/protocol/pulsar/index.html index 78261bdaff5..42aa36c4b58 100644 --- a/it/docs/protocol/pulsar/index.html +++ b/it/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/it/docs/protocol/security/index.html b/it/docs/protocol/security/index.html index 9047e0b1b9d..63f20934268 100644 --- a/it/docs/protocol/security/index.html +++ b/it/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/it/docs/protocol/substrate-cli/index.html b/it/docs/protocol/substrate-cli/index.html index c99c4c57cd6..c84b8ed0004 100644 --- a/it/docs/protocol/substrate-cli/index.html +++ b/it/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/it/docs/protocol/timekeeping/index.html b/it/docs/protocol/timekeeping/index.html index d5cb1f2c3a2..ae752c99b90 100644 --- a/it/docs/protocol/timekeeping/index.html +++ b/it/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/it/docs/protocol/wallets/polkadot/index.html b/it/docs/protocol/wallets/polkadot/index.html index 3018024fab0..cf153929089 100644 --- a/it/docs/protocol/wallets/polkadot/index.html +++ b/it/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/it/docs/protocol/wallets/subwallet/index.html b/it/docs/protocol/wallets/subwallet/index.html index 025f5c93ea5..015890da40c 100644 --- a/it/docs/protocol/wallets/subwallet/index.html +++ b/it/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/it/index.html b/it/index.html index d41089374f8..96d3401cc35 100644 --- a/it/index.html +++ b/it/index.html @@ -7,13 +7,13 @@ - +

    Coltiva da Ovunque

    Guadagna ricompense eseguendo un nodo agricoltore impegnando un disco di riserva. Non è richiesta alcuna configurazione costosa o capitale iniziale.

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/it/markdown-page/index.html b/it/markdown-page/index.html index e06747325f3..b6c4b5ccc1f 100644 --- a/it/markdown-page/index.html +++ b/it/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ja/404.html b/ja/404.html index 8791bea464c..f6f32a30c6c 100644 --- a/ja/404.html +++ b/ja/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ja/assets/js/0a728d8d.1360055e.js b/ja/assets/js/0a728d8d.1360055e.js deleted file mode 100644 index 9451e92d42a..00000000000 --- a/ja/assets/js/0a728d8d.1360055e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[2400],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/ja/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/ja/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/ja/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/ja/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/ja/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ja/assets/js/0a728d8d.b87dedd8.js b/ja/assets/js/0a728d8d.b87dedd8.js new file mode 100644 index 00000000000..22597fc4221 --- /dev/null +++ b/ja/assets/js/0a728d8d.b87dedd8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[2400],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});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 s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=a,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/ja/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/ja/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/ja/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/ja/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,a.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,a.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,a.kt)("hr",null),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,a.kt)("em",{parentName:"a"},"Summarized"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,a.kt)("em",{parentName:"a"},"Full Length")))),(0,a.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,a.kt)("hr",null),(0,a.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,a.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,a.kt)("a",{parentName:"h3",href:"/ja/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,a.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,a.kt)("hr",null),(0,a.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,a.kt)("h3",{id:"--core-protocol-development"},"- ",(0,a.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ja/assets/js/runtime~main.00e587aa.js b/ja/assets/js/runtime~main.73a5c2dd.js similarity index 99% rename from ja/assets/js/runtime~main.00e587aa.js rename to ja/assets/js/runtime~main.73a5c2dd.js index cc2b4c2e8b8..3fdd873dbdc 100644 --- a/ja/assets/js/runtime~main.00e587aa.js +++ b/ja/assets/js/runtime~main.73a5c2dd.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,d,t={},b={};function r(e){var f=b[e];if(void 0!==f)return f.exports;var a=b[e]={exports:{}};return t[e].call(a.exports,a,a.exports,r),a.exports}r.m=t,e=[],r.O=(f,a,c,d)=>{if(!a){var t=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(b=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var t={};f=f||[null,a({}),a([]),a(a)];for(var b=2&c&&e;"object"==typeof b&&!~f.indexOf(b);b=a(b))Object.getOwnPropertyNames(b).forEach((f=>t[f]=()=>e[f]));return t.default=()=>e,r.d(d,t),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",128:"2afde319",204:"6e4243a4",380:"dc463f51",382:"22d91883",597:"7db16994",621:"0f8a9672",635:"c03df9f3",735:"accbce51",955:"e3d97618",1366:"ef899d2e",1520:"fdecc08c",1612:"48907202",1675:"5161c87c",1734:"fbdccab5",1969:"62601017",2032:"79310731",2118:"e24dfa88",2217:"13fffeb7",2400:"0a728d8d",2422:"71707df2",2515:"60c15d02",2566:"9bdcae59",2592:"8da35111",2719:"5af6b628",2856:"a7440a00",2895:"c1cc5b79",3085:"1f391b9e",3143:"15ce12a4",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3450:"b9e2903b",3508:"a8e827c8",3762:"e8b4f910",4006:"2a2616e0",4314:"c65ebdb6",4326:"78772e33",4492:"4601a2ec",4576:"0df3e6c9",4861:"5001db9d",5013:"2112dc4b",5186:"e8eea05f",5255:"a1eea7ff",5622:"78b73005",5789:"58398ba7",5790:"15e9ae6f",5903:"4734ac4d",6225:"a2a30768",6283:"fb41abf1",6516:"a4ab27e8",6838:"88e93ae1",7270:"e55e0fac",7370:"c09f4ff7",7414:"393be207",7711:"58226ca4",7865:"0216d99c",7892:"9565e70f",7893:"5c60d358",7918:"17896441",8155:"179da0b6",8238:"43d92bfe",8355:"81cbafc1",8713:"488c5284",8871:"05f1d168",9210:"f11d7c27",9267:"551695ed",9318:"eba38f5a",9514:"1be78505",9690:"9808124d",9767:"d2b75300",9817:"14eb3368"}[e]||e)+"."+{53:"642e5ec3",128:"9460e578",204:"e048c327",380:"deb51b00",382:"437b17d0",597:"b54e7373",621:"72ad6242",635:"d98f40cb",735:"ab3a2302",814:"dc8c3a26",955:"7b1c9cbf",1366:"cc07e0a2",1520:"377d85ba",1612:"4a350ae5",1675:"55ee28a2",1734:"b0ce5e7b",1969:"6bdb3c86",2032:"12328bba",2118:"289a62e7",2217:"45d74fa4",2400:"1360055e",2422:"9a8dd46f",2515:"855a097c",2566:"c7ce9241",2592:"24335151",2719:"32a86c62",2856:"417d96a1",2895:"667620f6",3085:"3a447380",3143:"41ed8983",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3450:"f4bfa3a7",3473:"fdffa07c",3508:"b02f3ada",3762:"d6990efd",4006:"d1322ac1",4314:"20281b91",4326:"d0641479",4492:"82de6883",4576:"ab1b0c34",4861:"2d0ea360",4972:"4a54fd4a",5013:"502021e3",5186:"f088665a",5255:"2f82ee86",5622:"8a775081",5789:"9cc4b6b0",5790:"208f34a9",5903:"a85d89d9",6225:"f0f5286c",6283:"34068ee1",6516:"d163ae35",6838:"524739da",7270:"754218e4",7370:"224158d7",7414:"4819fc5b",7711:"1094e4ff",7865:"53f71b65",7892:"525e748f",7893:"205cb457",7918:"e3da5265",8155:"ef53481f",8238:"72df9b02",8355:"1ca34047",8713:"632ea016",8871:"6bf7f514",9210:"81457831",9267:"1c86b07f",9318:"6f7bab5b",9514:"478c02c6",9690:"df19b35d",9767:"81015079",9817:"b7ea7ab7"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,t)=>{if(c[e])c[e].push(f);else{var b,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/ja/",r.gca=function(e){return e={17896441:"7918",48907202:"1612",62601017:"1969",79310731:"2032","935f2afb":"53","2afde319":"128","6e4243a4":"204",dc463f51:"380","22d91883":"382","7db16994":"597","0f8a9672":"621",c03df9f3:"635",accbce51:"735",e3d97618:"955",ef899d2e:"1366",fdecc08c:"1520","5161c87c":"1675",fbdccab5:"1734",e24dfa88:"2118","13fffeb7":"2217","0a728d8d":"2400","71707df2":"2422","60c15d02":"2515","9bdcae59":"2566","8da35111":"2592","5af6b628":"2719",a7440a00:"2856",c1cc5b79:"2895","1f391b9e":"3085","15ce12a4":"3143",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280",b9e2903b:"3450",a8e827c8:"3508",e8b4f910:"3762","2a2616e0":"4006",c65ebdb6:"4314","78772e33":"4326","4601a2ec":"4492","0df3e6c9":"4576","5001db9d":"4861","2112dc4b":"5013",e8eea05f:"5186",a1eea7ff:"5255","78b73005":"5622","58398ba7":"5789","15e9ae6f":"5790","4734ac4d":"5903",a2a30768:"6225",fb41abf1:"6283",a4ab27e8:"6516","88e93ae1":"6838",e55e0fac:"7270",c09f4ff7:"7370","393be207":"7414","58226ca4":"7711","0216d99c":"7865","9565e70f":"7892","5c60d358":"7893","179da0b6":"8155","43d92bfe":"8238","81cbafc1":"8355","488c5284":"8713","05f1d168":"8871",f11d7c27:"9210","551695ed":"9267",eba38f5a:"9318","1be78505":"9514","9808124d":"9690",d2b75300:"9767","14eb3368":"9817"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var t=r.p+r.u(f),b=new Error;r.l(t,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),t=a&&a.target&&a.target.src;b.message="Loading chunk "+f+" failed.\n("+d+": "+t+")",b.name="ChunkLoadError",b.type=d,b.request=t,c[1](b)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,t=a[0],b=a[1],o=a[2],n=0;if(t.some((f=>0!==e[f]))){for(c in b)r.o(b,c)&&(r.m[c]=b[c]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,f,a,c,d,t={},b={};function r(e){var f=b[e];if(void 0!==f)return f.exports;var a=b[e]={exports:{}};return t[e].call(a.exports,a,a.exports,r),a.exports}r.m=t,e=[],r.O=(f,a,c,d)=>{if(!a){var t=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(b=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var t={};f=f||[null,a({}),a([]),a(a)];for(var b=2&c&&e;"object"==typeof b&&!~f.indexOf(b);b=a(b))Object.getOwnPropertyNames(b).forEach((f=>t[f]=()=>e[f]));return t.default=()=>e,r.d(d,t),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",128:"2afde319",204:"6e4243a4",380:"dc463f51",382:"22d91883",597:"7db16994",621:"0f8a9672",635:"c03df9f3",735:"accbce51",955:"e3d97618",1366:"ef899d2e",1520:"fdecc08c",1612:"48907202",1675:"5161c87c",1734:"fbdccab5",1969:"62601017",2032:"79310731",2118:"e24dfa88",2217:"13fffeb7",2400:"0a728d8d",2422:"71707df2",2515:"60c15d02",2566:"9bdcae59",2592:"8da35111",2719:"5af6b628",2856:"a7440a00",2895:"c1cc5b79",3085:"1f391b9e",3143:"15ce12a4",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3450:"b9e2903b",3508:"a8e827c8",3762:"e8b4f910",4006:"2a2616e0",4314:"c65ebdb6",4326:"78772e33",4492:"4601a2ec",4576:"0df3e6c9",4861:"5001db9d",5013:"2112dc4b",5186:"e8eea05f",5255:"a1eea7ff",5622:"78b73005",5789:"58398ba7",5790:"15e9ae6f",5903:"4734ac4d",6225:"a2a30768",6283:"fb41abf1",6516:"a4ab27e8",6838:"88e93ae1",7270:"e55e0fac",7370:"c09f4ff7",7414:"393be207",7711:"58226ca4",7865:"0216d99c",7892:"9565e70f",7893:"5c60d358",7918:"17896441",8155:"179da0b6",8238:"43d92bfe",8355:"81cbafc1",8713:"488c5284",8871:"05f1d168",9210:"f11d7c27",9267:"551695ed",9318:"eba38f5a",9514:"1be78505",9690:"9808124d",9767:"d2b75300",9817:"14eb3368"}[e]||e)+"."+{53:"642e5ec3",128:"9460e578",204:"e048c327",380:"deb51b00",382:"437b17d0",597:"b54e7373",621:"72ad6242",635:"d98f40cb",735:"ab3a2302",814:"dc8c3a26",955:"7b1c9cbf",1366:"cc07e0a2",1520:"377d85ba",1612:"4a350ae5",1675:"55ee28a2",1734:"b0ce5e7b",1969:"6bdb3c86",2032:"12328bba",2118:"289a62e7",2217:"45d74fa4",2400:"b87dedd8",2422:"9a8dd46f",2515:"855a097c",2566:"c7ce9241",2592:"24335151",2719:"32a86c62",2856:"417d96a1",2895:"667620f6",3085:"3a447380",3143:"41ed8983",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3450:"f4bfa3a7",3473:"fdffa07c",3508:"b02f3ada",3762:"d6990efd",4006:"d1322ac1",4314:"20281b91",4326:"d0641479",4492:"82de6883",4576:"ab1b0c34",4861:"2d0ea360",4972:"4a54fd4a",5013:"502021e3",5186:"f088665a",5255:"2f82ee86",5622:"8a775081",5789:"9cc4b6b0",5790:"208f34a9",5903:"a85d89d9",6225:"f0f5286c",6283:"34068ee1",6516:"d163ae35",6838:"524739da",7270:"754218e4",7370:"224158d7",7414:"4819fc5b",7711:"1094e4ff",7865:"53f71b65",7892:"525e748f",7893:"205cb457",7918:"e3da5265",8155:"ef53481f",8238:"72df9b02",8355:"1ca34047",8713:"632ea016",8871:"6bf7f514",9210:"81457831",9267:"1c86b07f",9318:"6f7bab5b",9514:"478c02c6",9690:"df19b35d",9767:"81015079",9817:"b7ea7ab7"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,t)=>{if(c[e])c[e].push(f);else{var b,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/ja/",r.gca=function(e){return e={17896441:"7918",48907202:"1612",62601017:"1969",79310731:"2032","935f2afb":"53","2afde319":"128","6e4243a4":"204",dc463f51:"380","22d91883":"382","7db16994":"597","0f8a9672":"621",c03df9f3:"635",accbce51:"735",e3d97618:"955",ef899d2e:"1366",fdecc08c:"1520","5161c87c":"1675",fbdccab5:"1734",e24dfa88:"2118","13fffeb7":"2217","0a728d8d":"2400","71707df2":"2422","60c15d02":"2515","9bdcae59":"2566","8da35111":"2592","5af6b628":"2719",a7440a00:"2856",c1cc5b79:"2895","1f391b9e":"3085","15ce12a4":"3143",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280",b9e2903b:"3450",a8e827c8:"3508",e8b4f910:"3762","2a2616e0":"4006",c65ebdb6:"4314","78772e33":"4326","4601a2ec":"4492","0df3e6c9":"4576","5001db9d":"4861","2112dc4b":"5013",e8eea05f:"5186",a1eea7ff:"5255","78b73005":"5622","58398ba7":"5789","15e9ae6f":"5790","4734ac4d":"5903",a2a30768:"6225",fb41abf1:"6283",a4ab27e8:"6516","88e93ae1":"6838",e55e0fac:"7270",c09f4ff7:"7370","393be207":"7414","58226ca4":"7711","0216d99c":"7865","9565e70f":"7892","5c60d358":"7893","179da0b6":"8155","43d92bfe":"8238","81cbafc1":"8355","488c5284":"8713","05f1d168":"8871",f11d7c27:"9210","551695ed":"9267",eba38f5a:"9318","1be78505":"9514","9808124d":"9690",d2b75300:"9767","14eb3368":"9817"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var t=r.p+r.u(f),b=new Error;r.l(t,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),t=a&&a.target&&a.target.src;b.message="Loading chunk "+f+" failed.\n("+d+": "+t+")",b.name="ChunkLoadError",b.type=d,b.request=t,c[1](b)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,t=a[0],b=a[1],o=a[2],n=0;if(t.some((f=>0!==e[f]))){for(c in b)r.o(b,c)&&(r.m[c]=b[c]);if(o)var i=o(r)}for(f&&f(a);n - + - + \ No newline at end of file diff --git a/ja/docs/category/developer-documentation/index.html b/ja/docs/category/developer-documentation/index.html index fb964b05d60..41554081e86 100644 --- a/ja/docs/category/developer-documentation/index.html +++ b/ja/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ja/docs/category/get-started-with-farming/index.html b/ja/docs/category/get-started-with-farming/index.html index 048ef735452..70071d3aa7b 100644 --- a/ja/docs/category/get-started-with-farming/index.html +++ b/ja/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ja/docs/category/operators-and-staking/index.html b/ja/docs/category/operators-and-staking/index.html index 37a37a1462c..b9763ddf360 100644 --- a/ja/docs/category/operators-and-staking/index.html +++ b/ja/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ja/docs/category/wallets/index.html b/ja/docs/category/wallets/index.html index 6b25370d5e7..4a6c3855276 100644 --- a/ja/docs/category/wallets/index.html +++ b/ja/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ja/docs/community/CODE_OF_CONDUCT/index.html b/ja/docs/community/CODE_OF_CONDUCT/index.html index ed1e893b620..8e2b640d894 100644 --- a/ja/docs/community/CODE_OF_CONDUCT/index.html +++ b/ja/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/ja/docs/community/contribute/index.html b/ja/docs/community/contribute/index.html index 7a8819e2ede..cc36fc95733 100644 --- a/ja/docs/community/contribute/index.html +++ b/ja/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/ja/docs/community/index.html b/ja/docs/community/index.html index 2c537c5a0eb..cda02262f52 100644 --- a/ja/docs/community/index.html +++ b/ja/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/ja/docs/community/translate/index.html b/ja/docs/community/translate/index.html index 06fefa4460c..910c13b1c3f 100644 --- a/ja/docs/community/translate/index.html +++ b/ja/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/ja/docs/developers/block_explorer/index.html b/ja/docs/developers/block_explorer/index.html index 6cc087153b4..2589845dc7c 100644 --- a/ja/docs/developers/block_explorer/index.html +++ b/ja/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ja/docs/developers/faucet/index.html b/ja/docs/developers/faucet/index.html index 23142ba3b9f..7ed255fba02 100644 --- a/ja/docs/developers/faucet/index.html +++ b/ja/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/ja/docs/developers/foundry_guide/index.html b/ja/docs/developers/foundry_guide/index.html index 147b87c415e..6088dc3327b 100644 --- a/ja/docs/developers/foundry_guide/index.html +++ b/ja/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/ja/docs/developers/general-information/index.html b/ja/docs/developers/general-information/index.html index 071880d8615..2f5a2900da0 100644 --- a/ja/docs/developers/general-information/index.html +++ b/ja/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/ja/docs/developers/hardhat_guide/index.html b/ja/docs/developers/hardhat_guide/index.html index 179a68542a2..03fc355194f 100644 --- a/ja/docs/developers/hardhat_guide/index.html +++ b/ja/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/ja/docs/developers/intro/index.html b/ja/docs/developers/intro/index.html index 4181ad9a416..4e8aaac2579 100644 --- a/ja/docs/developers/intro/index.html +++ b/ja/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/ja/docs/developers/local_development/index.html b/ja/docs/developers/local_development/index.html index 748c189ab68..5fa72600820 100644 --- a/ja/docs/developers/local_development/index.html +++ b/ja/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/ja/docs/developers/quick_start/index.html b/ja/docs/developers/quick_start/index.html index 9b057bafd81..924da0d6ea9 100644 --- a/ja/docs/developers/quick_start/index.html +++ b/ja/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/ja/docs/developers/remix_guide/index.html b/ja/docs/developers/remix_guide/index.html index 46833a17e77..ecf934d133c 100644 --- a/ja/docs/developers/remix_guide/index.html +++ b/ja/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/ja/docs/developers/setting-up-metamask/index.html b/ja/docs/developers/setting-up-metamask/index.html index 0a79a42e72d..260033d4a65 100644 --- a/ja/docs/developers/setting-up-metamask/index.html +++ b/ja/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/ja/docs/intro/index.html b/ja/docs/intro/index.html index 63dfea0d644..22f83acc11c 100644 --- a/ja/docs/intro/index.html +++ b/ja/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/ja/docs/operators_and_staking/intro/index.html b/ja/docs/operators_and_staking/intro/index.html index 7ff07a57783..d07e9877747 100644 --- a/ja/docs/operators_and_staking/intro/index.html +++ b/ja/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/ja/docs/operators_and_staking/operators/index.html b/ja/docs/operators_and_staking/operators/index.html index 34b09be6d17..d00314aae07 100644 --- a/ja/docs/operators_and_staking/operators/index.html +++ b/ja/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/ja/docs/operators_and_staking/staking/index.html b/ja/docs/operators_and_staking/staking/index.html index 20f13b70699..93063a36e4c 100644 --- a/ja/docs/operators_and_staking/staking/index.html +++ b/ja/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/ja/docs/pre-release/category/community/index.html b/ja/docs/pre-release/category/community/index.html index 683affae95f..e6f8d863eb3 100644 --- a/ja/docs/pre-release/category/community/index.html +++ b/ja/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ja/docs/pre-release/category/developer-documentation/index.html b/ja/docs/pre-release/category/developer-documentation/index.html index 2c4137a0385..bf4d051c8d9 100644 --- a/ja/docs/pre-release/category/developer-documentation/index.html +++ b/ja/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ja/docs/pre-release/category/get-started-with-farming/index.html b/ja/docs/pre-release/category/get-started-with-farming/index.html index 3eae4092de8..6a342f88fae 100644 --- a/ja/docs/pre-release/category/get-started-with-farming/index.html +++ b/ja/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ja/docs/pre-release/category/operators-and-staking/index.html b/ja/docs/pre-release/category/operators-and-staking/index.html index d2217620ae0..58263c954ce 100644 --- a/ja/docs/pre-release/category/operators-and-staking/index.html +++ b/ja/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ja/docs/pre-release/category/wallets/index.html b/ja/docs/pre-release/category/wallets/index.html index b1fb3e4e625..80247a20cae 100644 --- a/ja/docs/pre-release/category/wallets/index.html +++ b/ja/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ja/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/ja/docs/pre-release/community/CODE_OF_CONDUCT/index.html index c61ccdb4481..04f4ce7df73 100644 --- a/ja/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/ja/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/community/contribute/index.html b/ja/docs/pre-release/community/contribute/index.html index 5a3ca225175..a4fc3ee196c 100644 --- a/ja/docs/pre-release/community/contribute/index.html +++ b/ja/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/community/index.html b/ja/docs/pre-release/community/index.html index 419c81034ae..9f7ac351c8c 100644 --- a/ja/docs/pre-release/community/index.html +++ b/ja/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/ja/docs/pre-release/community/translate/index.html b/ja/docs/pre-release/community/translate/index.html index 7c126a24885..98da0999bd9 100644 --- a/ja/docs/pre-release/community/translate/index.html +++ b/ja/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/developers/block_explorer/index.html b/ja/docs/pre-release/developers/block_explorer/index.html index 757189e4d51..a74fb354e58 100644 --- a/ja/docs/pre-release/developers/block_explorer/index.html +++ b/ja/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/developers/faucet/index.html b/ja/docs/pre-release/developers/faucet/index.html index b348a9f3a98..4eb250503e0 100644 --- a/ja/docs/pre-release/developers/faucet/index.html +++ b/ja/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/developers/foundry_guide/index.html b/ja/docs/pre-release/developers/foundry_guide/index.html index 6c8a60aac33..4f55d14c953 100644 --- a/ja/docs/pre-release/developers/foundry_guide/index.html +++ b/ja/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/developers/general-information/index.html b/ja/docs/pre-release/developers/general-information/index.html index d6f2de886bd..06da8461ef2 100644 --- a/ja/docs/pre-release/developers/general-information/index.html +++ b/ja/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/developers/hardhat_guide/index.html b/ja/docs/pre-release/developers/hardhat_guide/index.html index 5d51816928b..e5aaaca0318 100644 --- a/ja/docs/pre-release/developers/hardhat_guide/index.html +++ b/ja/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/ja/docs/pre-release/developers/intro/index.html b/ja/docs/pre-release/developers/intro/index.html index 6a4bbde3957..ab4408d176f 100644 --- a/ja/docs/pre-release/developers/intro/index.html +++ b/ja/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/developers/local_development/index.html b/ja/docs/pre-release/developers/local_development/index.html index a1fc7c14152..aa4d9844433 100644 --- a/ja/docs/pre-release/developers/local_development/index.html +++ b/ja/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/developers/quick_start/index.html b/ja/docs/pre-release/developers/quick_start/index.html index 856f89f4f20..366f8d62139 100644 --- a/ja/docs/pre-release/developers/quick_start/index.html +++ b/ja/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/developers/remix_guide/index.html b/ja/docs/pre-release/developers/remix_guide/index.html index 24ecb81993a..9f5655af0e2 100644 --- a/ja/docs/pre-release/developers/remix_guide/index.html +++ b/ja/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/developers/setting-up-metamask/index.html b/ja/docs/pre-release/developers/setting-up-metamask/index.html index 1dfa9d29edc..a2e5f4a061a 100644 --- a/ja/docs/pre-release/developers/setting-up-metamask/index.html +++ b/ja/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/intro/index.html b/ja/docs/pre-release/intro/index.html index 0c3ec4a034b..7ff5ed69653 100644 --- a/ja/docs/pre-release/intro/index.html +++ b/ja/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/operators_and_staking/intro/index.html b/ja/docs/pre-release/operators_and_staking/intro/index.html index baa200dcd92..5e7024e49b5 100644 --- a/ja/docs/pre-release/operators_and_staking/intro/index.html +++ b/ja/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/operators_and_staking/operators/index.html b/ja/docs/pre-release/operators_and_staking/operators/index.html index aa550d90299..30b63e080cd 100644 --- a/ja/docs/pre-release/operators_and_staking/operators/index.html +++ b/ja/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/operators_and_staking/staking/index.html b/ja/docs/pre-release/operators_and_staking/staking/index.html index 7494a23bbb5..8bca12d0952 100644 --- a/ja/docs/pre-release/operators_and_staking/staking/index.html +++ b/ja/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/ja/docs/pre-release/protocol/common_problems/index.html b/ja/docs/pre-release/protocol/common_problems/index.html index e8b98a64b66..68632a7bb76 100644 --- a/ja/docs/pre-release/protocol/common_problems/index.html +++ b/ja/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/protocol/port-forwarding/index.html b/ja/docs/pre-release/protocol/port-forwarding/index.html index 1c3d5514b70..3759d78ba64 100644 --- a/ja/docs/pre-release/protocol/port-forwarding/index.html +++ b/ja/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/ja/docs/pre-release/protocol/pulsar/index.html b/ja/docs/pre-release/protocol/pulsar/index.html index cdfd53160bd..cebe9944b69 100644 --- a/ja/docs/pre-release/protocol/pulsar/index.html +++ b/ja/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/protocol/security/index.html b/ja/docs/pre-release/protocol/security/index.html index 8bb0f40187a..4e537e4f8bd 100644 --- a/ja/docs/pre-release/protocol/security/index.html +++ b/ja/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/protocol/substrate-cli/index.html b/ja/docs/pre-release/protocol/substrate-cli/index.html index 7a708eb8633..a8bec13bd52 100644 --- a/ja/docs/pre-release/protocol/substrate-cli/index.html +++ b/ja/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/protocol/timekeeping/index.html b/ja/docs/pre-release/protocol/timekeeping/index.html index 7cbfad4ca10..51a27c4d756 100644 --- a/ja/docs/pre-release/protocol/timekeeping/index.html +++ b/ja/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/ja/docs/pre-release/protocol/wallets/polkadot/index.html b/ja/docs/pre-release/protocol/wallets/polkadot/index.html index 05147dd3f3c..b0d0df0005c 100644 --- a/ja/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/ja/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/ja/docs/pre-release/protocol/wallets/subwallet/index.html b/ja/docs/pre-release/protocol/wallets/subwallet/index.html index c5553894ba0..8f8a7ab96d7 100644 --- a/ja/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/ja/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/ja/docs/protocol/common_problems/index.html b/ja/docs/protocol/common_problems/index.html index 7e620abb9ed..1501c82264a 100644 --- a/ja/docs/protocol/common_problems/index.html +++ b/ja/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/ja/docs/protocol/port-forwarding/index.html b/ja/docs/protocol/port-forwarding/index.html index 66e2bfaf8cf..0b8f3cf4341 100644 --- a/ja/docs/protocol/port-forwarding/index.html +++ b/ja/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/ja/docs/protocol/pulsar/index.html b/ja/docs/protocol/pulsar/index.html index 2d16ad4a414..318cfcbb9ee 100644 --- a/ja/docs/protocol/pulsar/index.html +++ b/ja/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ja/docs/protocol/security/index.html b/ja/docs/protocol/security/index.html index 32f2c4e4b39..ec2e0594507 100644 --- a/ja/docs/protocol/security/index.html +++ b/ja/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/ja/docs/protocol/substrate-cli/index.html b/ja/docs/protocol/substrate-cli/index.html index aa3d8da297b..fb50ec81bde 100644 --- a/ja/docs/protocol/substrate-cli/index.html +++ b/ja/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ja/docs/protocol/timekeeping/index.html b/ja/docs/protocol/timekeeping/index.html index 0ec840e34fb..6c082dd03ae 100644 --- a/ja/docs/protocol/timekeeping/index.html +++ b/ja/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/ja/docs/protocol/wallets/polkadot/index.html b/ja/docs/protocol/wallets/polkadot/index.html index 57c24ede25c..a90bd02ae75 100644 --- a/ja/docs/protocol/wallets/polkadot/index.html +++ b/ja/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/ja/docs/protocol/wallets/subwallet/index.html b/ja/docs/protocol/wallets/subwallet/index.html index f61ac976ce9..1b23cd11f67 100644 --- a/ja/docs/protocol/wallets/subwallet/index.html +++ b/ja/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/ja/index.html b/ja/index.html index 190a2c71d50..6a553f68cfc 100644 --- a/ja/index.html +++ b/ja/index.html @@ -7,13 +7,13 @@ - +

    どこからでも農場

    余分なディスクを誓約して農家ノードを実行することで報酬を獲得します。高価な設定や前払いの資本は必要ありません。

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/ja/markdown-page/index.html b/ja/markdown-page/index.html index 1a4a8aecafd..fe61472ea45 100644 --- a/ja/markdown-page/index.html +++ b/ja/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/markdown-page/index.html b/markdown-page/index.html index e7c7aaf3d06..ebf147eb4fa 100644 --- a/markdown-page/index.html +++ b/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/pt/404.html b/pt/404.html index e54c6357565..e71c47d7e17 100644 --- a/pt/404.html +++ b/pt/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/pt/assets/js/2396292c.3672151f.js b/pt/assets/js/2396292c.43d44de2.js similarity index 73% rename from pt/assets/js/2396292c.3672151f.js rename to pt/assets/js/2396292c.43d44de2.js index 8b1de7b0500..e67153aed76 100644 --- a/pt/assets/js/2396292c.3672151f.js +++ b/pt/assets/js/2396292c.43d44de2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[6212],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/pt/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/pt/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/pt/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/pt/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/pt/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[6212],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/pt/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/pt/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/pt/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/pt/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/pt/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/pt/assets/js/runtime~main.2383f35d.js b/pt/assets/js/runtime~main.59fef520.js similarity index 99% rename from pt/assets/js/runtime~main.2383f35d.js rename to pt/assets/js/runtime~main.59fef520.js index b2df7637ea1..a9c7b121ae0 100644 --- a/pt/assets/js/runtime~main.2383f35d.js +++ b/pt/assets/js/runtime~main.59fef520.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,c,a,d,t={},b={};function r(e){var f=b[e];if(void 0!==f)return f.exports;var c=b[e]={exports:{}};return t[e].call(c.exports,c,c.exports,r),c.exports}r.m=t,e=[],r.O=(f,c,a,d)=>{if(!c){var t=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(b=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,a,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var t={};f=f||[null,c({}),c([]),c(c)];for(var b=2&a&&e;"object"==typeof b&&!~f.indexOf(b);b=c(b))Object.getOwnPropertyNames(b).forEach((f=>t[f]=()=>e[f]));return t.default=()=>e,r.d(d,t),d},r.d=(e,f)=>{for(var c in f)r.o(f,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:f[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,c)=>(r.f[c](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",144:"7e21f2c8",450:"fc66e808",455:"789c98fb",594:"10495114",810:"e59c2d81",929:"29393b07",1170:"dfb8681d",1293:"eb4da53b",1302:"e437035e",1615:"14088701",1653:"88460b60",1697:"fd4dc6c0",1720:"0a96cb08",2146:"a259d876",2200:"95bb7336",2271:"42210786",2289:"1954a59c",2402:"808249c2",2409:"c64c1e72",2602:"7758225f",2679:"4a7fc11c",2811:"4045497e",2822:"8d83a915",2878:"a9c450b3",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3755:"40fc41a1",3908:"aeb08459",4032:"8e03c7ce",4054:"c42fd8de",4583:"caa1630f",4662:"1891c92d",4922:"e0f14f25",5004:"73e26ef8",5250:"d5ae7ec0",5304:"3b87c757",5474:"edb6947a",6202:"bd14a32a",6212:"2396292c",6310:"21ec47b1",6331:"27b01853",6815:"ecadfbe0",7127:"5186ce47",7260:"63da9331",7329:"2604663c",7367:"062b146a",7370:"c09f4ff7",7389:"e7574989",7414:"393be207",7425:"cdbfb207",7546:"48c64738",7551:"876694ec",7657:"3e232d99",7767:"ecb3508d",7918:"17896441",7933:"aa22f428",8854:"85fc688d",8907:"4d95fedb",8914:"112dd046",9128:"84dbbdf2",9173:"4e23a88d",9179:"30fc5459",9197:"9c5d0b5d",9275:"d4d18a79",9309:"07455229",9366:"7ab52054",9514:"1be78505",9817:"14eb3368",9848:"fd9d19b4"}[e]||e)+"."+{53:"4acbf3d7",144:"ad60a7d7",450:"f67d1c6e",455:"b6778548",594:"d9e7d77d",810:"78944ed5",814:"dc8c3a26",929:"aa85dd59",1170:"65cb19de",1293:"ba026b9b",1302:"88319106",1615:"29fdbce1",1653:"fef4a856",1697:"9cdf93fe",1720:"ee96da44",2146:"4025452a",2200:"cba63e46",2271:"4f94fc57",2289:"7f8e637e",2402:"1111e738",2409:"d62f119f",2602:"6df18006",2679:"2196a20b",2811:"b717bc17",2822:"9edc8944",2878:"1bdbdb8f",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3755:"f3fdc343",3908:"8c4e695b",4032:"7e2c63d0",4054:"bea6ad18",4583:"20fcea96",4662:"3b89e436",4922:"a75ecde0",4972:"4a54fd4a",5004:"16ed9f46",5250:"c03ccb92",5304:"2e92aa44",5474:"ea25d7d7",6202:"f15aae99",6212:"3672151f",6310:"cfbf0bfd",6331:"192b8d8d",6815:"6f819f7f",7127:"9a59db33",7260:"7342a88e",7329:"9b27102c",7367:"a7269631",7370:"df229636",7389:"cff208f2",7414:"18cec083",7425:"6789be81",7546:"8a38385c",7551:"b4c4da7d",7657:"b05b7df8",7767:"0a669d8a",7918:"e3da5265",7933:"c1a3120e",8854:"f33e7a8f",8907:"7634136d",8914:"0dee99d2",9128:"d7023eb3",9173:"1258adfb",9179:"95ce493f",9197:"7279c020",9275:"fb49cb97",9309:"3231d397",9366:"2f982e2c",9514:"478c02c6",9817:"b7ea7ab7",9848:"65f4e6fb"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),a={},d="portal:",r.l=(e,f,c,t)=>{if(a[e])a[e].push(f);else{var b,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var d=a[e];if(delete a[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(c))),f)return f(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/pt/",r.gca=function(e){return e={10495114:"594",14088701:"1615",17896441:"7918",42210786:"2271","935f2afb":"53","7e21f2c8":"144",fc66e808:"450","789c98fb":"455",e59c2d81:"810","29393b07":"929",dfb8681d:"1170",eb4da53b:"1293",e437035e:"1302","88460b60":"1653",fd4dc6c0:"1697","0a96cb08":"1720",a259d876:"2146","95bb7336":"2200","1954a59c":"2289","808249c2":"2402",c64c1e72:"2409","7758225f":"2602","4a7fc11c":"2679","4045497e":"2811","8d83a915":"2822",a9c450b3:"2878","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","40fc41a1":"3755",aeb08459:"3908","8e03c7ce":"4032",c42fd8de:"4054",caa1630f:"4583","1891c92d":"4662",e0f14f25:"4922","73e26ef8":"5004",d5ae7ec0:"5250","3b87c757":"5304",edb6947a:"5474",bd14a32a:"6202","2396292c":"6212","21ec47b1":"6310","27b01853":"6331",ecadfbe0:"6815","5186ce47":"7127","63da9331":"7260","2604663c":"7329","062b146a":"7367",c09f4ff7:"7370",e7574989:"7389","393be207":"7414",cdbfb207:"7425","48c64738":"7546","876694ec":"7551","3e232d99":"7657",ecb3508d:"7767",aa22f428:"7933","85fc688d":"8854","4d95fedb":"8907","112dd046":"8914","84dbbdf2":"9128","4e23a88d":"9173","30fc5459":"9179","9c5d0b5d":"9197",d4d18a79:"9275","07455229":"9309","7ab52054":"9366","1be78505":"9514","14eb3368":"9817",fd9d19b4:"9848"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,c)=>{var a=r.o(e,f)?e[f]:void 0;if(0!==a)if(a)c.push(a[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((c,d)=>a=e[f]=[c,d]));c.push(a[2]=d);var t=r.p+r.u(f),b=new Error;r.l(t,(c=>{if(r.o(e,f)&&(0!==(a=e[f])&&(e[f]=void 0),a)){var d=c&&("load"===c.type?"missing":c.type),t=c&&c.target&&c.target.src;b.message="Loading chunk "+f+" failed.\n("+d+": "+t+")",b.name="ChunkLoadError",b.type=d,b.request=t,a[1](b)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,c)=>{var a,d,t=c[0],b=c[1],o=c[2],n=0;if(t.some((f=>0!==e[f]))){for(a in b)r.o(b,a)&&(r.m[a]=b[a]);if(o)var i=o(r)}for(f&&f(c);n{"use strict";var e,f,c,a,d,t={},b={};function r(e){var f=b[e];if(void 0!==f)return f.exports;var c=b[e]={exports:{}};return t[e].call(c.exports,c,c.exports,r),c.exports}r.m=t,e=[],r.O=(f,c,a,d)=>{if(!c){var t=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(b=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,a,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var t={};f=f||[null,c({}),c([]),c(c)];for(var b=2&a&&e;"object"==typeof b&&!~f.indexOf(b);b=c(b))Object.getOwnPropertyNames(b).forEach((f=>t[f]=()=>e[f]));return t.default=()=>e,r.d(d,t),d},r.d=(e,f)=>{for(var c in f)r.o(f,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:f[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,c)=>(r.f[c](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",144:"7e21f2c8",450:"fc66e808",455:"789c98fb",594:"10495114",810:"e59c2d81",929:"29393b07",1170:"dfb8681d",1293:"eb4da53b",1302:"e437035e",1615:"14088701",1653:"88460b60",1697:"fd4dc6c0",1720:"0a96cb08",2146:"a259d876",2200:"95bb7336",2271:"42210786",2289:"1954a59c",2402:"808249c2",2409:"c64c1e72",2602:"7758225f",2679:"4a7fc11c",2811:"4045497e",2822:"8d83a915",2878:"a9c450b3",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3755:"40fc41a1",3908:"aeb08459",4032:"8e03c7ce",4054:"c42fd8de",4583:"caa1630f",4662:"1891c92d",4922:"e0f14f25",5004:"73e26ef8",5250:"d5ae7ec0",5304:"3b87c757",5474:"edb6947a",6202:"bd14a32a",6212:"2396292c",6310:"21ec47b1",6331:"27b01853",6815:"ecadfbe0",7127:"5186ce47",7260:"63da9331",7329:"2604663c",7367:"062b146a",7370:"c09f4ff7",7389:"e7574989",7414:"393be207",7425:"cdbfb207",7546:"48c64738",7551:"876694ec",7657:"3e232d99",7767:"ecb3508d",7918:"17896441",7933:"aa22f428",8854:"85fc688d",8907:"4d95fedb",8914:"112dd046",9128:"84dbbdf2",9173:"4e23a88d",9179:"30fc5459",9197:"9c5d0b5d",9275:"d4d18a79",9309:"07455229",9366:"7ab52054",9514:"1be78505",9817:"14eb3368",9848:"fd9d19b4"}[e]||e)+"."+{53:"4acbf3d7",144:"ad60a7d7",450:"f67d1c6e",455:"b6778548",594:"d9e7d77d",810:"78944ed5",814:"dc8c3a26",929:"aa85dd59",1170:"65cb19de",1293:"ba026b9b",1302:"88319106",1615:"29fdbce1",1653:"fef4a856",1697:"9cdf93fe",1720:"ee96da44",2146:"4025452a",2200:"cba63e46",2271:"4f94fc57",2289:"7f8e637e",2402:"1111e738",2409:"d62f119f",2602:"6df18006",2679:"2196a20b",2811:"b717bc17",2822:"9edc8944",2878:"1bdbdb8f",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3755:"f3fdc343",3908:"8c4e695b",4032:"7e2c63d0",4054:"bea6ad18",4583:"20fcea96",4662:"3b89e436",4922:"a75ecde0",4972:"4a54fd4a",5004:"16ed9f46",5250:"c03ccb92",5304:"2e92aa44",5474:"ea25d7d7",6202:"f15aae99",6212:"43d44de2",6310:"cfbf0bfd",6331:"192b8d8d",6815:"6f819f7f",7127:"9a59db33",7260:"7342a88e",7329:"9b27102c",7367:"a7269631",7370:"df229636",7389:"cff208f2",7414:"18cec083",7425:"6789be81",7546:"8a38385c",7551:"b4c4da7d",7657:"b05b7df8",7767:"0a669d8a",7918:"e3da5265",7933:"c1a3120e",8854:"f33e7a8f",8907:"7634136d",8914:"0dee99d2",9128:"d7023eb3",9173:"1258adfb",9179:"95ce493f",9197:"7279c020",9275:"fb49cb97",9309:"3231d397",9366:"2f982e2c",9514:"478c02c6",9817:"b7ea7ab7",9848:"65f4e6fb"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),a={},d="portal:",r.l=(e,f,c,t)=>{if(a[e])a[e].push(f);else{var b,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var d=a[e];if(delete a[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(c))),f)return f(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/pt/",r.gca=function(e){return e={10495114:"594",14088701:"1615",17896441:"7918",42210786:"2271","935f2afb":"53","7e21f2c8":"144",fc66e808:"450","789c98fb":"455",e59c2d81:"810","29393b07":"929",dfb8681d:"1170",eb4da53b:"1293",e437035e:"1302","88460b60":"1653",fd4dc6c0:"1697","0a96cb08":"1720",a259d876:"2146","95bb7336":"2200","1954a59c":"2289","808249c2":"2402",c64c1e72:"2409","7758225f":"2602","4a7fc11c":"2679","4045497e":"2811","8d83a915":"2822",a9c450b3:"2878","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","40fc41a1":"3755",aeb08459:"3908","8e03c7ce":"4032",c42fd8de:"4054",caa1630f:"4583","1891c92d":"4662",e0f14f25:"4922","73e26ef8":"5004",d5ae7ec0:"5250","3b87c757":"5304",edb6947a:"5474",bd14a32a:"6202","2396292c":"6212","21ec47b1":"6310","27b01853":"6331",ecadfbe0:"6815","5186ce47":"7127","63da9331":"7260","2604663c":"7329","062b146a":"7367",c09f4ff7:"7370",e7574989:"7389","393be207":"7414",cdbfb207:"7425","48c64738":"7546","876694ec":"7551","3e232d99":"7657",ecb3508d:"7767",aa22f428:"7933","85fc688d":"8854","4d95fedb":"8907","112dd046":"8914","84dbbdf2":"9128","4e23a88d":"9173","30fc5459":"9179","9c5d0b5d":"9197",d4d18a79:"9275","07455229":"9309","7ab52054":"9366","1be78505":"9514","14eb3368":"9817",fd9d19b4:"9848"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,c)=>{var a=r.o(e,f)?e[f]:void 0;if(0!==a)if(a)c.push(a[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((c,d)=>a=e[f]=[c,d]));c.push(a[2]=d);var t=r.p+r.u(f),b=new Error;r.l(t,(c=>{if(r.o(e,f)&&(0!==(a=e[f])&&(e[f]=void 0),a)){var d=c&&("load"===c.type?"missing":c.type),t=c&&c.target&&c.target.src;b.message="Loading chunk "+f+" failed.\n("+d+": "+t+")",b.name="ChunkLoadError",b.type=d,b.request=t,a[1](b)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,c)=>{var a,d,t=c[0],b=c[1],o=c[2],n=0;if(t.some((f=>0!==e[f]))){for(a in b)r.o(b,a)&&(r.m[a]=b[a]);if(o)var i=o(r)}for(f&&f(c);n - + - + \ No newline at end of file diff --git a/pt/docs/category/developer-documentation/index.html b/pt/docs/category/developer-documentation/index.html index 57be74bbad0..628fba0f267 100644 --- a/pt/docs/category/developer-documentation/index.html +++ b/pt/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/pt/docs/category/get-started-with-farming/index.html b/pt/docs/category/get-started-with-farming/index.html index c18dec7263e..7fb54c1360e 100644 --- a/pt/docs/category/get-started-with-farming/index.html +++ b/pt/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/pt/docs/category/operators-and-staking/index.html b/pt/docs/category/operators-and-staking/index.html index 172d96969ab..e04a3b4279f 100644 --- a/pt/docs/category/operators-and-staking/index.html +++ b/pt/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/pt/docs/category/wallets/index.html b/pt/docs/category/wallets/index.html index 2b43eb6dddd..024e5765ede 100644 --- a/pt/docs/category/wallets/index.html +++ b/pt/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/pt/docs/community/CODE_OF_CONDUCT/index.html b/pt/docs/community/CODE_OF_CONDUCT/index.html index d09450b3df5..e4ed2bb46eb 100644 --- a/pt/docs/community/CODE_OF_CONDUCT/index.html +++ b/pt/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/pt/docs/community/contribute/index.html b/pt/docs/community/contribute/index.html index fa65eaa2b65..59dc86b1fd6 100644 --- a/pt/docs/community/contribute/index.html +++ b/pt/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/pt/docs/community/index.html b/pt/docs/community/index.html index 45b65f5c5cd..28c2aa70586 100644 --- a/pt/docs/community/index.html +++ b/pt/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/pt/docs/community/translate/index.html b/pt/docs/community/translate/index.html index ea756336a35..ec87a6dfd66 100644 --- a/pt/docs/community/translate/index.html +++ b/pt/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/pt/docs/developers/block_explorer/index.html b/pt/docs/developers/block_explorer/index.html index a9cd4ba56ce..539dc1250ca 100644 --- a/pt/docs/developers/block_explorer/index.html +++ b/pt/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/pt/docs/developers/faucet/index.html b/pt/docs/developers/faucet/index.html index 83c70623719..3f97897da00 100644 --- a/pt/docs/developers/faucet/index.html +++ b/pt/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/pt/docs/developers/foundry_guide/index.html b/pt/docs/developers/foundry_guide/index.html index 131e8327afe..438110c9308 100644 --- a/pt/docs/developers/foundry_guide/index.html +++ b/pt/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/pt/docs/developers/general-information/index.html b/pt/docs/developers/general-information/index.html index 830ac6d297e..bc164dce59a 100644 --- a/pt/docs/developers/general-information/index.html +++ b/pt/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/pt/docs/developers/hardhat_guide/index.html b/pt/docs/developers/hardhat_guide/index.html index efbf4fab8b7..afb6f96edc2 100644 --- a/pt/docs/developers/hardhat_guide/index.html +++ b/pt/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/pt/docs/developers/intro/index.html b/pt/docs/developers/intro/index.html index 77437d8cfd9..e7dc67bc7d8 100644 --- a/pt/docs/developers/intro/index.html +++ b/pt/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/pt/docs/developers/local_development/index.html b/pt/docs/developers/local_development/index.html index 13dd6c62b5d..edb81463102 100644 --- a/pt/docs/developers/local_development/index.html +++ b/pt/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/pt/docs/developers/quick_start/index.html b/pt/docs/developers/quick_start/index.html index 1392cdf92ea..7f112349f23 100644 --- a/pt/docs/developers/quick_start/index.html +++ b/pt/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/pt/docs/developers/remix_guide/index.html b/pt/docs/developers/remix_guide/index.html index 640490796f1..397482978bc 100644 --- a/pt/docs/developers/remix_guide/index.html +++ b/pt/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/pt/docs/developers/setting-up-metamask/index.html b/pt/docs/developers/setting-up-metamask/index.html index 4a95ebf23e2..387c4f277ab 100644 --- a/pt/docs/developers/setting-up-metamask/index.html +++ b/pt/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/pt/docs/intro/index.html b/pt/docs/intro/index.html index 07ffdeb62df..d596f1585b8 100644 --- a/pt/docs/intro/index.html +++ b/pt/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/pt/docs/operators_and_staking/intro/index.html b/pt/docs/operators_and_staking/intro/index.html index 4d11b0fe607..d5cd0e6db3f 100644 --- a/pt/docs/operators_and_staking/intro/index.html +++ b/pt/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/pt/docs/operators_and_staking/operators/index.html b/pt/docs/operators_and_staking/operators/index.html index b04fc554a23..6aace7677f3 100644 --- a/pt/docs/operators_and_staking/operators/index.html +++ b/pt/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/pt/docs/operators_and_staking/staking/index.html b/pt/docs/operators_and_staking/staking/index.html index 6277f934393..fd11b4849f4 100644 --- a/pt/docs/operators_and_staking/staking/index.html +++ b/pt/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/pt/docs/pre-release/category/community/index.html b/pt/docs/pre-release/category/community/index.html index ba5eac0ecd0..38140f20efc 100644 --- a/pt/docs/pre-release/category/community/index.html +++ b/pt/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/pt/docs/pre-release/category/developer-documentation/index.html b/pt/docs/pre-release/category/developer-documentation/index.html index 771cce560a2..6d70409c46d 100644 --- a/pt/docs/pre-release/category/developer-documentation/index.html +++ b/pt/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/pt/docs/pre-release/category/get-started-with-farming/index.html b/pt/docs/pre-release/category/get-started-with-farming/index.html index 93ceaf7ba1d..abf3644b06d 100644 --- a/pt/docs/pre-release/category/get-started-with-farming/index.html +++ b/pt/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/pt/docs/pre-release/category/operators-and-staking/index.html b/pt/docs/pre-release/category/operators-and-staking/index.html index 22cab86ec22..f66dec20f0b 100644 --- a/pt/docs/pre-release/category/operators-and-staking/index.html +++ b/pt/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/pt/docs/pre-release/category/wallets/index.html b/pt/docs/pre-release/category/wallets/index.html index b2a7b6a50ce..8d63ccce23f 100644 --- a/pt/docs/pre-release/category/wallets/index.html +++ b/pt/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/pt/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/pt/docs/pre-release/community/CODE_OF_CONDUCT/index.html index ae172698840..1ca6dbe51f7 100644 --- a/pt/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/pt/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/community/contribute/index.html b/pt/docs/pre-release/community/contribute/index.html index 49299744e14..efb27087512 100644 --- a/pt/docs/pre-release/community/contribute/index.html +++ b/pt/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/community/index.html b/pt/docs/pre-release/community/index.html index 8baf076a2c9..4abdb3d5db2 100644 --- a/pt/docs/pre-release/community/index.html +++ b/pt/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/pt/docs/pre-release/community/translate/index.html b/pt/docs/pre-release/community/translate/index.html index 9164d734346..d5777ec859e 100644 --- a/pt/docs/pre-release/community/translate/index.html +++ b/pt/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/developers/block_explorer/index.html b/pt/docs/pre-release/developers/block_explorer/index.html index 16a8f80def6..ba6c99df8f5 100644 --- a/pt/docs/pre-release/developers/block_explorer/index.html +++ b/pt/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/developers/faucet/index.html b/pt/docs/pre-release/developers/faucet/index.html index 524232b0ab8..eccaa38b008 100644 --- a/pt/docs/pre-release/developers/faucet/index.html +++ b/pt/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/developers/foundry_guide/index.html b/pt/docs/pre-release/developers/foundry_guide/index.html index d4a6dd4f5b8..814da888698 100644 --- a/pt/docs/pre-release/developers/foundry_guide/index.html +++ b/pt/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/developers/general-information/index.html b/pt/docs/pre-release/developers/general-information/index.html index e9c4a72f76c..6d515353789 100644 --- a/pt/docs/pre-release/developers/general-information/index.html +++ b/pt/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/developers/hardhat_guide/index.html b/pt/docs/pre-release/developers/hardhat_guide/index.html index 38b31a84e32..6e35823491d 100644 --- a/pt/docs/pre-release/developers/hardhat_guide/index.html +++ b/pt/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/pt/docs/pre-release/developers/intro/index.html b/pt/docs/pre-release/developers/intro/index.html index 5f9efeefd80..19ef9ff5c99 100644 --- a/pt/docs/pre-release/developers/intro/index.html +++ b/pt/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/developers/local_development/index.html b/pt/docs/pre-release/developers/local_development/index.html index fee53a16f7d..a5b26cc189e 100644 --- a/pt/docs/pre-release/developers/local_development/index.html +++ b/pt/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/developers/quick_start/index.html b/pt/docs/pre-release/developers/quick_start/index.html index 8c43ad62c72..a324b8792aa 100644 --- a/pt/docs/pre-release/developers/quick_start/index.html +++ b/pt/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/developers/remix_guide/index.html b/pt/docs/pre-release/developers/remix_guide/index.html index 1cf1ffeaf5c..145964be808 100644 --- a/pt/docs/pre-release/developers/remix_guide/index.html +++ b/pt/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/developers/setting-up-metamask/index.html b/pt/docs/pre-release/developers/setting-up-metamask/index.html index 20fd4588691..efb4c54be90 100644 --- a/pt/docs/pre-release/developers/setting-up-metamask/index.html +++ b/pt/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/intro/index.html b/pt/docs/pre-release/intro/index.html index e02a4cfcd42..7c8f5325092 100644 --- a/pt/docs/pre-release/intro/index.html +++ b/pt/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/operators_and_staking/intro/index.html b/pt/docs/pre-release/operators_and_staking/intro/index.html index ee64787df81..7c12c80606b 100644 --- a/pt/docs/pre-release/operators_and_staking/intro/index.html +++ b/pt/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/operators_and_staking/operators/index.html b/pt/docs/pre-release/operators_and_staking/operators/index.html index daf4e1c0a17..b72718a4ef9 100644 --- a/pt/docs/pre-release/operators_and_staking/operators/index.html +++ b/pt/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/operators_and_staking/staking/index.html b/pt/docs/pre-release/operators_and_staking/staking/index.html index f5fab4c37f7..a6cab3bc9dd 100644 --- a/pt/docs/pre-release/operators_and_staking/staking/index.html +++ b/pt/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/pt/docs/pre-release/protocol/common_problems/index.html b/pt/docs/pre-release/protocol/common_problems/index.html index 8925bd37ce4..3f2739fa79e 100644 --- a/pt/docs/pre-release/protocol/common_problems/index.html +++ b/pt/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/protocol/port-forwarding/index.html b/pt/docs/pre-release/protocol/port-forwarding/index.html index fbe37ee38bb..9939a18fa45 100644 --- a/pt/docs/pre-release/protocol/port-forwarding/index.html +++ b/pt/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/pt/docs/pre-release/protocol/pulsar/index.html b/pt/docs/pre-release/protocol/pulsar/index.html index 15d2fa4e4f7..4f85ee97ffd 100644 --- a/pt/docs/pre-release/protocol/pulsar/index.html +++ b/pt/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/protocol/security/index.html b/pt/docs/pre-release/protocol/security/index.html index 1929c22ef1c..99cec31d903 100644 --- a/pt/docs/pre-release/protocol/security/index.html +++ b/pt/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/protocol/substrate-cli/index.html b/pt/docs/pre-release/protocol/substrate-cli/index.html index 97f540c1bb9..c834ca6ca89 100644 --- a/pt/docs/pre-release/protocol/substrate-cli/index.html +++ b/pt/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/protocol/timekeeping/index.html b/pt/docs/pre-release/protocol/timekeeping/index.html index f44f7995ff8..b65c6ed234a 100644 --- a/pt/docs/pre-release/protocol/timekeeping/index.html +++ b/pt/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/pt/docs/pre-release/protocol/wallets/polkadot/index.html b/pt/docs/pre-release/protocol/wallets/polkadot/index.html index 6e3b64211dc..324ee0d2c5c 100644 --- a/pt/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/pt/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/pt/docs/pre-release/protocol/wallets/subwallet/index.html b/pt/docs/pre-release/protocol/wallets/subwallet/index.html index 98ff85e934e..36ef7ac8d22 100644 --- a/pt/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/pt/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/pt/docs/protocol/common_problems/index.html b/pt/docs/protocol/common_problems/index.html index 291833c1cd3..b046f8101fc 100644 --- a/pt/docs/protocol/common_problems/index.html +++ b/pt/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/pt/docs/protocol/port-forwarding/index.html b/pt/docs/protocol/port-forwarding/index.html index e6818ed578a..b85a4401c54 100644 --- a/pt/docs/protocol/port-forwarding/index.html +++ b/pt/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/pt/docs/protocol/pulsar/index.html b/pt/docs/protocol/pulsar/index.html index 443a43f479b..290b0770e1d 100644 --- a/pt/docs/protocol/pulsar/index.html +++ b/pt/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/pt/docs/protocol/security/index.html b/pt/docs/protocol/security/index.html index 1d1ae78eeb3..e37221c4722 100644 --- a/pt/docs/protocol/security/index.html +++ b/pt/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/pt/docs/protocol/substrate-cli/index.html b/pt/docs/protocol/substrate-cli/index.html index 0c4e4d179e0..10a8242dc1d 100644 --- a/pt/docs/protocol/substrate-cli/index.html +++ b/pt/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/pt/docs/protocol/timekeeping/index.html b/pt/docs/protocol/timekeeping/index.html index b2c71f5fff7..ee65c128e90 100644 --- a/pt/docs/protocol/timekeeping/index.html +++ b/pt/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/pt/docs/protocol/wallets/polkadot/index.html b/pt/docs/protocol/wallets/polkadot/index.html index e8d233b46c4..cf6b12a6b34 100644 --- a/pt/docs/protocol/wallets/polkadot/index.html +++ b/pt/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/pt/docs/protocol/wallets/subwallet/index.html b/pt/docs/protocol/wallets/subwallet/index.html index 80695f3b7a3..8ae4f6ea8d1 100644 --- a/pt/docs/protocol/wallets/subwallet/index.html +++ b/pt/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/pt/index.html b/pt/index.html index 897568fa61e..6caafffe7d5 100644 --- a/pt/index.html +++ b/pt/index.html @@ -7,13 +7,13 @@ - +

    Fazenda de Qualquer Lugar

    Ganhe recompensas executando um nó de agricultor, comprometendo um disco sobressalente. Não é necessária configuração cara ou capital antecipado.

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/pt/markdown-page/index.html b/pt/markdown-page/index.html index 54e70f85970..c152936fe5b 100644 --- a/pt/markdown-page/index.html +++ b/pt/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ru/404.html b/ru/404.html index 20c190c16c4..21e0ee223fe 100644 --- a/ru/404.html +++ b/ru/404.html @@ -7,13 +7,13 @@ - +

    Страница не найдена

    К сожалению, мы не смогли найти запрашиваемую вами страницу.

    Пожалуйста, свяжитесь с владельцем сайта, на котором был указан оригинальный URL и сообщите о том, что указанная ссылка не работает.

    - + \ No newline at end of file diff --git a/ru/assets/js/da55f9da.b7f12559.js b/ru/assets/js/da55f9da.02b5177e.js similarity index 54% rename from ru/assets/js/da55f9da.b7f12559.js rename to ru/assets/js/da55f9da.02b5177e.js index d279d55452a..bcf1fdb4a1b 100644 --- a/ru/assets/js/da55f9da.b7f12559.js +++ b/ru/assets/js/da55f9da.02b5177e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[2883],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});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 s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(r),b=a,m=c["".concat(s,".").concat(b)]||c[b]||d[b]||o;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=b;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:a,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={title:"\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435",sidebar_position:1,description:"\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u0435\u0442\u044c\u044e Subspace",keywords:["\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435","\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435","Farming","\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430"]},i="\ud83d\udc4b \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c!",l={unversionedId:"intro",id:"version-latest/intro",title:"\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435",description:"\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u0435\u0442\u044c\u044e Subspace",source:"@site/i18n/ru/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/ru/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/ru/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435",sidebar_position:1,description:"\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u0435\u0442\u044c\u044e Subspace",keywords:["\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435","\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435","Farming","\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/ru/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u0435\u0442\u0438 Subspace",id:"-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435-\u043e-\u0441\u0435\u0442\u0438-subspace",level:2},{value:"\ud83e\udd1d \u0423\u0447\u0430\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u0432 \u0441\u0435\u0442\u0438",id:"-\u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0439\u0442\u0435-\u0432-\u0441\u0435\u0442\u0438",level:2},{value:"\u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0444\u0430\u0440\u043c\u0438\u043d\u0433 \u0441 Pulsar",id:"\u043d\u0430\u0447\u043d\u0438\u0442\u0435-\u0444\u0430\u0440\u043c\u0438\u043d\u0433-\u0441-pulsar",level:3},{value:"\ud83d\udcd6 \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432 \u0441\u0435\u0442\u0438 Subspace",id:"-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430-\u0432-\u0441\u0435\u0442\u0438-subspace",level:2},{value:"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430",id:"\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430-\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430",level:3}],u={toc:p},c="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"-\u0434\u043e\u0431\u0440\u043e-\u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c"},"\ud83d\udc4b \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c!"),(0,a.kt)("p",null,"\u0421\u0435\u0442\u044c Subspace - \u044d\u0442\u043e \u0430\u043c\u0431\u0438\u0446\u0438\u043e\u0437\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u043c, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c, & \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u043c \u0441\u043b\u043e\u0435\u043c \u0434\u043b\u044f \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c Web3."),(0,a.kt)("h2",{id:"-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435-\u043e-\u0441\u0435\u0442\u0438-subspace"},"\u2753 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u0435\u0442\u0438 Subspace"),(0,a.kt)("hr",null),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Subspace Network")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"\u0427\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,a.kt)("em",{parentName:"a"},"\u041e\u0431\u0449\u0435\u0435"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,a.kt)("em",{parentName:"a"},"\u041f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f")))),(0,a.kt)("h2",{id:"-\u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0439\u0442\u0435-\u0432-\u0441\u0435\u0442\u0438"},"\ud83e\udd1d \u0423\u0447\u0430\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u0432 \u0441\u0435\u0442\u0438"),(0,a.kt)("hr",null),(0,a.kt)("p",null,"\u041d\u0430\u0448\u0430 \u0446\u0435\u043b\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u043d\u0438\u0437\u043a\u0438\u0439 \u0431\u0430\u0440\u044c\u0435\u0440 \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0432 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0435, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0432\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c \u043d\u0438\u0436\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0442\u0435."),(0,a.kt)("h3",{id:"\u043d\u0430\u0447\u043d\u0438\u0442\u0435-\u0444\u0430\u0440\u043c\u0438\u043d\u0433-\u0441-pulsar"},"\u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0444\u0430\u0440\u043c\u0438\u043d\u0433 \u0441 Pulsar"),(0,a.kt)("h2",{id:"-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430-\u0432-\u0441\u0435\u0442\u0438-subspace"},"\ud83d\udcd6 \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432 \u0441\u0435\u0442\u0438 Subspace"),(0,a.kt)("hr",null),(0,a.kt)("p",null,"\u0421\u0435\u0442\u044c Subspace \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0436\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043c\u043e\u0449\u0438 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0435\u0442\u0438."),(0,a.kt)("h3",{id:"\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430-\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430"},"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430"))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[2883],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});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 l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(r),d=a,b=c["".concat(l,".").concat(d)]||c[d]||m[d]||o;return r?n.createElement(b,i(i({ref:t},u),{},{components:r})):n.createElement(b,i({ref:t},u))}));function b(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=d;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,i[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={title:"\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435",sidebar_position:1,description:"\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u0435\u0442\u044c\u044e Subspace",keywords:["\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435","\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435","Farming","\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430"]},i="\ud83d\udc4b \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c!",s={unversionedId:"intro",id:"version-latest/intro",title:"\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435",description:"\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u0435\u0442\u044c\u044e Subspace",source:"@site/i18n/ru/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/ru/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/ru/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435",sidebar_position:1,description:"\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u0435\u0442\u044c\u044e Subspace",keywords:["\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435","\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435","Farming","\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/ru/docs/category/get-started-with-farming"}},l={},p=[{value:"\u2753 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u0435\u0442\u0438 Subspace",id:"-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435-\u043e-\u0441\u0435\u0442\u0438-subspace",level:2},{value:"\ud83e\udd1d \u0423\u0447\u0430\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u0432 \u0441\u0435\u0442\u0438",id:"-\u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0439\u0442\u0435-\u0432-\u0441\u0435\u0442\u0438",level:2},{value:"\u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0444\u0430\u0440\u043c\u0438\u043d\u0433 \u0441 Pulsar",id:"\u043d\u0430\u0447\u043d\u0438\u0442\u0435-\u0444\u0430\u0440\u043c\u0438\u043d\u0433-\u0441-pulsar",level:3},{value:"\ud83d\udcd6 \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432 \u0441\u0435\u0442\u0438 Subspace",id:"-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430-\u0432-\u0441\u0435\u0442\u0438-subspace",level:2},{value:"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430",id:"\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430-\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430",level:3}],u={toc:p},c="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"-\u0434\u043e\u0431\u0440\u043e-\u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c"},"\ud83d\udc4b \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c!"),(0,a.kt)("p",null,"\u0421\u0435\u0442\u044c Subspace - \u044d\u0442\u043e \u0430\u043c\u0431\u0438\u0446\u0438\u043e\u0437\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u043c, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c, & \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u043c \u0441\u043b\u043e\u0435\u043c \u0434\u043b\u044f \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c Web3."),(0,a.kt)("h2",{id:"-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435-\u043e-\u0441\u0435\u0442\u0438-subspace"},"\u2753 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u0435\u0442\u0438 Subspace"),(0,a.kt)("hr",null),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Subspace Network")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"\u0427\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,a.kt)("em",{parentName:"a"},"\u041e\u0431\u0449\u0435\u0435"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,a.kt)("em",{parentName:"a"},"\u041f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f")))),(0,a.kt)("h2",{id:"-\u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0439\u0442\u0435-\u0432-\u0441\u0435\u0442\u0438"},"\ud83e\udd1d \u0423\u0447\u0430\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u0432 \u0441\u0435\u0442\u0438"),(0,a.kt)("hr",null),(0,a.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,a.kt)("h3",{id:"\u043d\u0430\u0447\u043d\u0438\u0442\u0435-\u0444\u0430\u0440\u043c\u0438\u043d\u0433-\u0441-pulsar"},"\u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0444\u0430\u0440\u043c\u0438\u043d\u0433 \u0441 Pulsar"),(0,a.kt)("h2",{id:"-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430-\u0432-\u0441\u0435\u0442\u0438-subspace"},"\ud83d\udcd6 \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432 \u0441\u0435\u0442\u0438 Subspace"),(0,a.kt)("hr",null),(0,a.kt)("p",null,"\u0421\u0435\u0442\u044c Subspace \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0436\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043c\u043e\u0449\u0438 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0435\u0442\u0438."),(0,a.kt)("h3",{id:"\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430-\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430"},"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ru/assets/js/runtime~main.8930115f.js b/ru/assets/js/runtime~main.37b0939c.js similarity index 99% rename from ru/assets/js/runtime~main.8930115f.js rename to ru/assets/js/runtime~main.37b0939c.js index cf600237635..6c4dae72b04 100644 --- a/ru/assets/js/runtime~main.8930115f.js +++ b/ru/assets/js/runtime~main.37b0939c.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,d,t={},b={};function r(e){var f=b[e];if(void 0!==f)return f.exports;var a=b[e]={exports:{}};return t[e].call(a.exports,a,a.exports,r),a.exports}r.m=t,e=[],r.O=(f,a,c,d)=>{if(!a){var t=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(b=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var t={};f=f||[null,a({}),a([]),a(a)];for(var b=2&c&&e;"object"==typeof b&&!~f.indexOf(b);b=a(b))Object.getOwnPropertyNames(b).forEach((f=>t[f]=()=>e[f]));return t.default=()=>e,r.d(d,t),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",219:"78a924c8",271:"ce939718",330:"d1aa066a",638:"5e39710f",1110:"584bd1f9",1213:"20bf91d0",1513:"5fdab597",1892:"47215978",1914:"059c800f",1979:"a4755a42",1980:"5e09aba1",2091:"554b002b",2194:"7a08d302",2231:"300898b2",2233:"03fe480f",2287:"87fcbfd7",2485:"6112095a",2581:"84f9d1e5",2883:"da55f9da",2923:"68658f31",3085:"1f391b9e",3172:"b3bb8996",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3336:"843e502e",3382:"6ebf06ee",3445:"e3fc1c3e",3751:"661c3ea9",3837:"2ca4639c",3903:"60ce88fd",3984:"f558ca80",4188:"ff63e7fe",4318:"d12df9cf",4577:"5e2aaf79",4734:"e7e4b663",5076:"4441c119",5265:"07d4e934",5305:"a3814213",5324:"3e6b9876",5605:"546d01bf",5802:"7e81c2db",5873:"2fc8ae7d",6060:"f850b556",6064:"e53c2bbf",6077:"1c62f950",6104:"c698f729",6159:"6d8cf55a",6468:"7c2214df",6865:"e889e26f",7013:"60c31f8c",7370:"c09f4ff7",7414:"393be207",7719:"8a974c43",7834:"e2c0f076",7918:"17896441",8674:"2eda095e",8885:"32e3e234",8917:"fe098ecc",9049:"6993dfb0",9066:"847d956b",9429:"40a42bb2",9445:"b51d6b31",9457:"6fd4dfea",9502:"d62e8a9b",9514:"1be78505",9646:"8d1bc0d0",9692:"f82411ed",9817:"14eb3368",9835:"c1637d40",9838:"fefee2a8"}[e]||e)+"."+{53:"d120a677",219:"3e9f5e4c",271:"0e808d68",330:"80789b04",638:"7cb07639",814:"dc8c3a26",1110:"c1912115",1213:"9ad4e859",1513:"595d1f8d",1892:"fbe09051",1914:"f89a2c6b",1979:"c9523a05",1980:"194b4d81",2091:"6d92176f",2194:"f4a92398",2231:"d8f45898",2233:"3d11cc72",2287:"2d7119c4",2485:"7fcc85ac",2581:"21c0bddd",2883:"b7f12559",2923:"e7fae276",3085:"3a447380",3172:"3049dba3",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3336:"cb8ab5ea",3382:"5235acb4",3445:"df81a543",3473:"fdffa07c",3751:"e93d6a64",3837:"f3bcdb24",3903:"8854678c",3984:"97f7da4c",4188:"acef5117",4318:"543b45da",4577:"8753d9f5",4734:"3fd427fd",4972:"4a54fd4a",5076:"8a41951a",5265:"a0389408",5305:"82a1fe9a",5324:"8719be44",5605:"a45cbfb2",5802:"42474230",5873:"bff9a6ae",6060:"f54df419",6064:"fd6bf53c",6077:"06c13b8e",6104:"b5089e92",6159:"60b1d9c6",6468:"1c7aa29b",6865:"f925735d",7013:"05fd25b5",7370:"d159a026",7414:"9035c9f0",7719:"61bab99e",7834:"dea884a4",7918:"e3da5265",8674:"3a35f990",8885:"36e8f9d7",8917:"200bb56f",9049:"8feed085",9066:"d69f4090",9429:"9fc0f7f2",9445:"3a296249",9457:"b41b2573",9502:"0ecc1ff8",9514:"478c02c6",9646:"d23fb554",9692:"3e6da530",9817:"b7ea7ab7",9835:"fb9c3bca",9838:"71d51b17"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,t)=>{if(c[e])c[e].push(f);else{var b,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/ru/",r.gca=function(e){return e={17896441:"7918",47215978:"1892","935f2afb":"53","78a924c8":"219",ce939718:"271",d1aa066a:"330","5e39710f":"638","584bd1f9":"1110","20bf91d0":"1213","5fdab597":"1513","059c800f":"1914",a4755a42:"1979","5e09aba1":"1980","554b002b":"2091","7a08d302":"2194","300898b2":"2231","03fe480f":"2233","87fcbfd7":"2287","6112095a":"2485","84f9d1e5":"2581",da55f9da:"2883","68658f31":"2923","1f391b9e":"3085",b3bb8996:"3172",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","843e502e":"3336","6ebf06ee":"3382",e3fc1c3e:"3445","661c3ea9":"3751","2ca4639c":"3837","60ce88fd":"3903",f558ca80:"3984",ff63e7fe:"4188",d12df9cf:"4318","5e2aaf79":"4577",e7e4b663:"4734","4441c119":"5076","07d4e934":"5265",a3814213:"5305","3e6b9876":"5324","546d01bf":"5605","7e81c2db":"5802","2fc8ae7d":"5873",f850b556:"6060",e53c2bbf:"6064","1c62f950":"6077",c698f729:"6104","6d8cf55a":"6159","7c2214df":"6468",e889e26f:"6865","60c31f8c":"7013",c09f4ff7:"7370","393be207":"7414","8a974c43":"7719",e2c0f076:"7834","2eda095e":"8674","32e3e234":"8885",fe098ecc:"8917","6993dfb0":"9049","847d956b":"9066","40a42bb2":"9429",b51d6b31:"9445","6fd4dfea":"9457",d62e8a9b:"9502","1be78505":"9514","8d1bc0d0":"9646",f82411ed:"9692","14eb3368":"9817",c1637d40:"9835",fefee2a8:"9838"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var t=r.p+r.u(f),b=new Error;r.l(t,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),t=a&&a.target&&a.target.src;b.message="Loading chunk "+f+" failed.\n("+d+": "+t+")",b.name="ChunkLoadError",b.type=d,b.request=t,c[1](b)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,t=a[0],b=a[1],o=a[2],n=0;if(t.some((f=>0!==e[f]))){for(c in b)r.o(b,c)&&(r.m[c]=b[c]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,f,a,c,d,t={},b={};function r(e){var f=b[e];if(void 0!==f)return f.exports;var a=b[e]={exports:{}};return t[e].call(a.exports,a,a.exports,r),a.exports}r.m=t,e=[],r.O=(f,a,c,d)=>{if(!a){var t=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(b=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var t={};f=f||[null,a({}),a([]),a(a)];for(var b=2&c&&e;"object"==typeof b&&!~f.indexOf(b);b=a(b))Object.getOwnPropertyNames(b).forEach((f=>t[f]=()=>e[f]));return t.default=()=>e,r.d(d,t),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",219:"78a924c8",271:"ce939718",330:"d1aa066a",638:"5e39710f",1110:"584bd1f9",1213:"20bf91d0",1513:"5fdab597",1892:"47215978",1914:"059c800f",1979:"a4755a42",1980:"5e09aba1",2091:"554b002b",2194:"7a08d302",2231:"300898b2",2233:"03fe480f",2287:"87fcbfd7",2485:"6112095a",2581:"84f9d1e5",2883:"da55f9da",2923:"68658f31",3085:"1f391b9e",3172:"b3bb8996",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3336:"843e502e",3382:"6ebf06ee",3445:"e3fc1c3e",3751:"661c3ea9",3837:"2ca4639c",3903:"60ce88fd",3984:"f558ca80",4188:"ff63e7fe",4318:"d12df9cf",4577:"5e2aaf79",4734:"e7e4b663",5076:"4441c119",5265:"07d4e934",5305:"a3814213",5324:"3e6b9876",5605:"546d01bf",5802:"7e81c2db",5873:"2fc8ae7d",6060:"f850b556",6064:"e53c2bbf",6077:"1c62f950",6104:"c698f729",6159:"6d8cf55a",6468:"7c2214df",6865:"e889e26f",7013:"60c31f8c",7370:"c09f4ff7",7414:"393be207",7719:"8a974c43",7834:"e2c0f076",7918:"17896441",8674:"2eda095e",8885:"32e3e234",8917:"fe098ecc",9049:"6993dfb0",9066:"847d956b",9429:"40a42bb2",9445:"b51d6b31",9457:"6fd4dfea",9502:"d62e8a9b",9514:"1be78505",9646:"8d1bc0d0",9692:"f82411ed",9817:"14eb3368",9835:"c1637d40",9838:"fefee2a8"}[e]||e)+"."+{53:"d120a677",219:"3e9f5e4c",271:"0e808d68",330:"80789b04",638:"7cb07639",814:"dc8c3a26",1110:"c1912115",1213:"9ad4e859",1513:"595d1f8d",1892:"fbe09051",1914:"f89a2c6b",1979:"c9523a05",1980:"194b4d81",2091:"6d92176f",2194:"f4a92398",2231:"d8f45898",2233:"3d11cc72",2287:"2d7119c4",2485:"7fcc85ac",2581:"21c0bddd",2883:"02b5177e",2923:"e7fae276",3085:"3a447380",3172:"3049dba3",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3336:"cb8ab5ea",3382:"5235acb4",3445:"df81a543",3473:"fdffa07c",3751:"e93d6a64",3837:"f3bcdb24",3903:"8854678c",3984:"97f7da4c",4188:"acef5117",4318:"543b45da",4577:"8753d9f5",4734:"3fd427fd",4972:"4a54fd4a",5076:"8a41951a",5265:"a0389408",5305:"82a1fe9a",5324:"8719be44",5605:"a45cbfb2",5802:"42474230",5873:"bff9a6ae",6060:"f54df419",6064:"fd6bf53c",6077:"06c13b8e",6104:"b5089e92",6159:"60b1d9c6",6468:"1c7aa29b",6865:"f925735d",7013:"05fd25b5",7370:"d159a026",7414:"9035c9f0",7719:"61bab99e",7834:"dea884a4",7918:"e3da5265",8674:"3a35f990",8885:"36e8f9d7",8917:"200bb56f",9049:"8feed085",9066:"d69f4090",9429:"9fc0f7f2",9445:"3a296249",9457:"b41b2573",9502:"0ecc1ff8",9514:"478c02c6",9646:"d23fb554",9692:"3e6da530",9817:"b7ea7ab7",9835:"fb9c3bca",9838:"71d51b17"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,t)=>{if(c[e])c[e].push(f);else{var b,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/ru/",r.gca=function(e){return e={17896441:"7918",47215978:"1892","935f2afb":"53","78a924c8":"219",ce939718:"271",d1aa066a:"330","5e39710f":"638","584bd1f9":"1110","20bf91d0":"1213","5fdab597":"1513","059c800f":"1914",a4755a42:"1979","5e09aba1":"1980","554b002b":"2091","7a08d302":"2194","300898b2":"2231","03fe480f":"2233","87fcbfd7":"2287","6112095a":"2485","84f9d1e5":"2581",da55f9da:"2883","68658f31":"2923","1f391b9e":"3085",b3bb8996:"3172",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","843e502e":"3336","6ebf06ee":"3382",e3fc1c3e:"3445","661c3ea9":"3751","2ca4639c":"3837","60ce88fd":"3903",f558ca80:"3984",ff63e7fe:"4188",d12df9cf:"4318","5e2aaf79":"4577",e7e4b663:"4734","4441c119":"5076","07d4e934":"5265",a3814213:"5305","3e6b9876":"5324","546d01bf":"5605","7e81c2db":"5802","2fc8ae7d":"5873",f850b556:"6060",e53c2bbf:"6064","1c62f950":"6077",c698f729:"6104","6d8cf55a":"6159","7c2214df":"6468",e889e26f:"6865","60c31f8c":"7013",c09f4ff7:"7370","393be207":"7414","8a974c43":"7719",e2c0f076:"7834","2eda095e":"8674","32e3e234":"8885",fe098ecc:"8917","6993dfb0":"9049","847d956b":"9066","40a42bb2":"9429",b51d6b31:"9445","6fd4dfea":"9457",d62e8a9b:"9502","1be78505":"9514","8d1bc0d0":"9646",f82411ed:"9692","14eb3368":"9817",c1637d40:"9835",fefee2a8:"9838"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var t=r.p+r.u(f),b=new Error;r.l(t,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),t=a&&a.target&&a.target.src;b.message="Loading chunk "+f+" failed.\n("+d+": "+t+")",b.name="ChunkLoadError",b.type=d,b.request=t,c[1](b)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,t=a[0],b=a[1],o=a[2],n=0;if(t.some((f=>0!==e[f]))){for(c in b)r.o(b,c)&&(r.m[c]=b[c]);if(o)var i=o(r)}for(f&&f(a);n - +
    - + \ No newline at end of file diff --git a/ru/docs/category/developer-documentation/index.html b/ru/docs/category/developer-documentation/index.html index 0b7032b298e..70060b77d96 100644 --- a/ru/docs/category/developer-documentation/index.html +++ b/ru/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ru/docs/category/get-started-with-farming/index.html b/ru/docs/category/get-started-with-farming/index.html index 40bd3ca2fec..4f2b20475e1 100644 --- a/ru/docs/category/get-started-with-farming/index.html +++ b/ru/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ru/docs/category/operators-and-staking/index.html b/ru/docs/category/operators-and-staking/index.html index 7589f14a592..4da5bf99d47 100644 --- a/ru/docs/category/operators-and-staking/index.html +++ b/ru/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/ru/docs/category/wallets/index.html b/ru/docs/category/wallets/index.html index 64f9bfe4dae..24ba0ce63fd 100644 --- a/ru/docs/category/wallets/index.html +++ b/ru/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ru/docs/community/CODE_OF_CONDUCT/index.html b/ru/docs/community/CODE_OF_CONDUCT/index.html index 7846392b09a..355b7ad989f 100644 --- a/ru/docs/community/CODE_OF_CONDUCT/index.html +++ b/ru/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Кодекс поведения участников

    Обязательства

    Мы, как участники, помощники и лидеры, обязуемся сделать участие в нашем сообществе свободным от притеснений для всех, независимо от возраста, телосложения, видимых или невидимых недостатков, этнической принадлежности, половых характеристик, гендерной идентичности и самовыражения, уровня опыта, образования, социально-экономического статуса, национальности, внешности, расы, каста, цвет кожи, религии или сексуальная идентичность и ориентации.

    Мы обязуемся действовать и взаимодействовать таким образом, чтобы способствовать созданию открытого, гостеприимного, разнообразного, инклюзивного и здорового сообщества.

    Наши стандарты

    Примеры поведения, способствующего созданию позитивной атмосферы в нашем сообществе, включают:

    • Демонстрация сочувствия и доброты по отношению к другим людям
    • Уважительное отношение к различным мнениям, точкам зрения и опыту
    • Давать и изящно принимать конструктивную обратную связь
    • Брать ответственность и приносить извинения тем, кого затронули наши ошибки, и учиться на этом опыте
    • Сосредоточить внимание на том, что лучше не только для нас как отдельных людей, но и для всего сообщества в целом

    Примеры неприемлемого поведения включают:

    • Использование сексуализированных выражений или образов, а также сексуальное внимание или приставания любого рода
    • Издевательства, оскорбительные или уничижительные комментарии, а также личные или политические нападки
    • Публичное или частное домогательство
    • Публикация личной информации других людей, такой как физический адрес или адрес электронной почты, без их личного разрешения
    • Иное поведение, которое обоснованно считать неуместным в профессиональной обстановке

    Ответственность за исполнение

    Лидеры сообщества несут ответственность за разъяснение и обеспечение соблюдения наших стандартов приемлемого поведения и будут принимать соответствующие и справедливые корректирующие меры в ответ на любое поведение, которое они считают неуместным, угрожающим, оскорбительным или вредным.

    Лидеры сообщества имеют право и ответственность удалять, редактировать или отклонять комментарии, выражения, код, правки в вики, проблемы и другие материалы, которые не соответствуют настоящему Кодексу поведения, и при необходимости сообщат причины принятия решений модераторами.

    Сфера действия

    Данный Кодекс поведения применяется во всех общественных местах, а также в тех случаях, когда физическое лицо официально представляет сообщество в общественных местах. Примерами представления нашего сообщества являются использование официального адреса электронной почты, публикация через официальный аккаунт в социальных сетях или выступление в качестве назначенного представителя на онлайн- или офлайн-мероприятии.

    Обеспечение выполнения

    О случаях оскорбительного, притесняющего или иным образом неприемлемого поведения можно сообщать лидерам сообщества, ответственным за соблюдение правил в Subspace Network Discord. Все жалобы будут рассмотрены и расследованы быстро и справедливо.

    Все лидеры сообщества обязаны уважать конфиденциальность и безопасность сообщившего о любом инциденте.

    Главные принципы применения

    Лидеры сообщества будут следовать этим главным принципам воздействия на сообщество при определении последствий любых действий, которые они считают нарушением настоящего кодекса поведения:

    1. Коррекция

    Влияние на сообщества: использование непристойного языка или другого поведения, считающегося непрофессиональным или ненадлежащим в сообществе.

    Последствия: Личное письменное предупреждение от лидеров сообщества, содержащее ясность в отношении характера нарушения и объяснение того, почему поведение было неуместным. Может быть потребовано публичное извинение.

    2. Предупреждение

    Влияние на общество: Нарушение в результате одного инцидента или серии случаев.

    Последствия: Предупреждение с последствиями для дальнейшего поведения. В течение этого периода не допускается никакое публичное или частное взаимодействие с вовлеченными лицами, включая нежелательное взаимодействие с теми, кто следит за соблюдением Кодекса поведения. Это включает в себя отказ от взаимодействия на просторах сообщества, а также во внешних каналах, таких как социальные сети. Нарушение этих условий может привести к временной или постоянной блокировке.

    3. Временная блокировка

    Влияние на сообщество: Серьезное нарушение стандартов сообщества, включая продолжительное неподобающее поведение.

    Последствия: Временный запрет на любое взаимодействие или публичное общения с сообществом на определенный период времени. В течение этого периода не допускается никакое публичное или частное взаимодействие с вовлеченными лицами, включая нежелательное взаимодействие с теми, кто следит за соблюдением Кодекса поведения. Нарушение данных условий может привести к постоянному запрету.

    4. Постоянная блокировка

    Влияние на сообщество: Демонстрация модели нарушения стандартов сообщества, включая устойчивое неподобающее поведение, преследование отдельного лица или агрессию по отношению к группам лиц или пренебрежительное отношение к ним.

    Последствия: Постоянная блокировка на любое публичное взаимодействие в рамках сообщества.

    Авторство

    Этот Кодекс поведения адаптирован к Соглашение участников, версии 2.1, доступной по ссылке https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Руководство по влиянию на общество было основано на коде поведения Mozilla (Code of conduct enforcement ladder.

    Ответы на распространенные вопросы об этом кодексе поведения см. в разделе Часто задаваемые вопросы по адресу https://www.contributor-covenant.org/faq. Переводы доступны на https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/ru/docs/community/contribute/index.html b/ru/docs/community/contribute/index.html index e2b19167a0e..526fc642163 100644 --- a/ru/docs/community/contribute/index.html +++ b/ru/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Вносим вклад в развитие!

    Правильный выбор!

    Прежде всего, спасибо Вам за то, что Вы решили внести свой вклад в развитие Subspace Network. Именно благодаря удивительному сотрудничеству таких людей, как вы, сообщество разработчиков открытого кода становится поистине удивительным. ❤️

    Помогите нам, а мы поможем вам!

    Соблюдение этих рекомендаций показывает, что вы уважаете время разработчиков, которые управляют и развивают этот проект с открытым исходным кодом. В свою очередь, они должны отвечать взаимностью на это, решая ваши проблемы, оценивая изменения и помогая вам завершить работу над вашими pull requests.

    Что я могу сделать?

    Мы являемся проектом с полностью открытым исходным кодом, что означает, что мы открыты для всех видов вклада со стороны нашего сообщества. Вот несколько примеров вкладов, к которым мы открыты:

    • Добавление контента: Вы написали хорошее руководство? Отправьте его на форум руководств.
    • Отчеты об ошибках и исправлениях: Нашли ошибку или недочет? Дайте нам знать, где она скрывается. Сообщите о ней на форуме поддержки.
    • Запрос и реализация функций: Хотите новую функцию? Поделитесь своими идеями, чтобы мы могли улучшить.

    Если у вас есть что-то, чего нет в списке, постарайтесь описать это как можно подробнее и не стесняйтесь отправить на pull request.

    Основные правила

    Пожалуйста, ознакомьтесь с нашим кодексом поведения.

    Ваш первый вклад

    Простое исправление

    Пожалуйста, воспользуйтесь этим гайдом для исправления незначительных ошибок, таких как орфографические ошибки, опечатки, неверные формулировки и т.д.

    Если вы добавляете совершенно новые страницы, функции и т.д., то обратитесь к разделу Advanced данного раздела.

    1. Перейдите в Subspace Documentation, и найдите страницу, которую вы хотели бы изменить.
    2. Прокрутите вниз и нажмите кнопку Edit this page.
    3. Откроется GitHub, и вы будете перенаправлены на страницу с исходными данными.
    4. В правом верхнем углу нажмите на эмодзи карандаша для редактирования страницы.
    5. GitHub изменит страницу на текстовый редактор, в котором можно будет вносить изменения.
    6. После того как изменения будут внесены, прокрутите страницу вниз и заполните следующие поля.
      • Заполните заголовок
      • Заполните описание
      • Нажмите на Create a new branch for this commit and start a pull request.
    7. Нажмите на Propose Changes
    8. Справа вы увидите несколько вариантов labels, вы можете применить наиболее точные из перечисленных.
    9. Нажмите Create Pull Request

    🎉Поздравляем! Вы только что отправили свой первый pull request! Пожалуйста, дайте некоторое время команде просмотреть ваш запрос и одобрить его, либо запросить корректировки.

    Никогда раньше не делали вклад?

    Не стоит беспокоиться! Все мы с чего-то начинаем 🚀 В Интернете есть несколько видеороликов и ресурсов, демонстрирующих различные способы использования GitHub. Ознакомьтесь с некоторыми из этих замечательных руководств, которые помогут вам освоить GitHub и внести свой вклад.

    Продвинутое исправление

    Этот раздел предполагает более глубокое понимание GitHub, а также основ программирования.

    При выполнении более крупных и сложных работ по устранению неисправностей необходимо следовать приведенным ниже основным принципам.

    • Не комментируйте простой и тривиальный код, такой как импорт существующих компонентов и базовый HTML/CSS.
    • Комментируйте сложный и нетривиальный код, сложная логика должна быть понятна.
    • Все публичные функции должны быть прокомментированы.
    • Если код тривиален, но со временем может быть забыт, пожалуйста, прокомментируйте его.
    • Попробуйте взглянуть на свой код от третьего лица, он должен быть понятен любому человеку, имеющему опыт работы с технологией, которую вы используете.
    • Иногда сложный для понимания код нуждается в рефакторинге, а не в дополнительных комментариях.
    • Убедитесь, что программа все еще может быть создана и запущена до подачи pull request.

    Для более сложных исправлений следует следовать общему пути GitHub.

    1. Создайте свой собственный форк кода. Форк
    2. Выполните изменения локально на своей системе в предпочитаемой среде разработки.
    3. Следуйте README.md инструкции, тестируйте изменения локально при помощи yarn build и yarn run serve или npm build и npm run serve чтобы убедиться в отсутствии явных проблем.
    4. Внесите изменения в свой форк и отправьте запрос на pull request, сравнивая между собой форки. Отправить Pull Request

    Как сообщить об ошибке или неисправности

    У нас нет какого-либо строгого шаблона, которому вы должны следовать, но, пожалуйста, предоставьте всю необходимую информацию, чтобы мы могли быстро решить любые вопросы.

    • Если вы обнаружили реальную ошибку в коде, пожалуйста, отправьте ее на GitHub и используйте метку bug.
    • Если вы обнаружили грамматическую/орфографическую/содержательную ошибку, пожалуйста, отправьте ее на GitHub, используя метку documentation.

    Как предложить функцию или улучшение

    Эта документация предназначена для сообщества, поэтому любые пожелания по функциям приветствуются.

    • Если вы запрашиваете какую-либо функцию, пожалуйста, отправьте запрос на GitHub и используйте метку enhancement.
    • Объясните, зачем нужна эта функция и какие проблемы она позволит решить.
    • Укажите, можете ли вы/хотите ли вы помочь в реализации этой функции.

    Процесс рецензирования кода

    • Команда рассмотрит все запросы (pull requests) на внесение изменений как можно скорее, обычно ответ приходит в течение одного-двух дней.
    • Если это простое и непротиворечивое исправление, мы рассмотрим и одобрим код.
    • Если возникнут вопросы, замечания или потребуется дополнительное обсуждение, мы свяжемся с автором Pull Request, чтобы попытаться решить эти вопросы.
    • При отсутствии ответа или активности в течение 2 недель после ответа команды мы можем закрыть pull request.

    Сообщество

    Вы можете пообщаться с командой в Discord: https://discord.gg/subspace-network

    - + \ No newline at end of file diff --git a/ru/docs/community/index.html b/ru/docs/community/index.html index df797136714..3907d14f027 100644 --- a/ru/docs/community/index.html +++ b/ru/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Удивительный SubSpace

    осторожность

    Пожалуйста, обратите внимание, что все ресурсы, предоставляемые сообществом, являются неофициальными. For clarification please refer to official materials.

    Группы сообщества


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - Русское Discord сообщество

    🇺🇦 - Украинское Discord сообщество

    Переводы сообщества

    Whitepaper

    Статьи

    Информация

    F.A.Q

    Getting Started Farming

    Medium

    Руководство по началу работы

    Приведение консенсуса PoC до Substrate

    Subspace - первый протокол, полностью разрешающий трилемму блокчейна без компромиссов. Provided by solgas

    События

    Первая АМА

    Мемы и Юмор


    - + \ No newline at end of file diff --git a/ru/docs/community/translate/index.html b/ru/docs/community/translate/index.html index 5c120bd78a7..7995d65ac50 100644 --- a/ru/docs/community/translate/index.html +++ b/ru/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Руководство по переводу

    Руководство по переводу

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Требования

    Рекомендации

    Инструкция

    Ниже вы найдете информацию о том, как обеспечить переводы для сети Subspace через портал переводов Crowdin.

    1. Посетите соответствующий портал переводов, для которого вы хотели бы помочь с переводом (см. выше)

      перевод-шаг-1

    2. Как только вы войдете в проект и присоединитесь к нему, вы будете перенаправлены на панель инструментов проекта, выберите язык, который вы хотите перевести. (см. ниже)

      перевод шаг-2

    3. Вы окажетесь на экране со всеми исходными файлами в списке, выберите Перевести все вверху справа (см. ниже)

      перевод-шаг-3

    4. Затем вы попадете на портал переводов, на этом портале вы найдете следующее

      1. Английская версия текста
      2. Укажите язык ввода перевода английского текста
      3. Автоматическое предложение текста
      4. Список слов, который необходимо перевести
      5. Точка для комментариев, если что-то нуждается в пояснениях

      перевод шаг-4

    5. Отсюда вы сможете заполнить ваши переводы, как только захотите, и завершите работу.

    6. Ваш перевод будет рассмотрен и одобрен своевременно, пожалуйста, обратите внимание, что перевод может занять пару дней, прежде чем он появится в развернутой документации.

    - + \ No newline at end of file diff --git a/ru/docs/developers/block_explorer/index.html b/ru/docs/developers/block_explorer/index.html index c772daac15d..c64327f0fdc 100644 --- a/ru/docs/developers/block_explorer/index.html +++ b/ru/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/ru/docs/developers/faucet/index.html b/ru/docs/developers/faucet/index.html index 95b2e7451f1..07fa44cbea7 100644 --- a/ru/docs/developers/faucet/index.html +++ b/ru/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/ru/docs/developers/foundry_guide/index.html b/ru/docs/developers/foundry_guide/index.html index 5d5c7c77ace..fbeba362913 100644 --- a/ru/docs/developers/foundry_guide/index.html +++ b/ru/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Версия: последние

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/ru/docs/developers/general-information/index.html b/ru/docs/developers/general-information/index.html index 5773300e147..c71d7181141 100644 --- a/ru/docs/developers/general-information/index.html +++ b/ru/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/ru/docs/developers/hardhat_guide/index.html b/ru/docs/developers/hardhat_guide/index.html index 831e788dd38..69834de54c3 100644 --- a/ru/docs/developers/hardhat_guide/index.html +++ b/ru/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/ru/docs/developers/intro/index.html b/ru/docs/developers/intro/index.html index 3632dd39a3e..255b35e9133 100644 --- a/ru/docs/developers/intro/index.html +++ b/ru/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/ru/docs/developers/local_development/index.html b/ru/docs/developers/local_development/index.html index a82b2881564..cef4f9ef39b 100644 --- a/ru/docs/developers/local_development/index.html +++ b/ru/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/ru/docs/developers/quick_start/index.html b/ru/docs/developers/quick_start/index.html index 6b280c464d9..cd9d0a9dd8a 100644 --- a/ru/docs/developers/quick_start/index.html +++ b/ru/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/ru/docs/developers/remix_guide/index.html b/ru/docs/developers/remix_guide/index.html index ad94c6ddd73..7c1df8dd7ac 100644 --- a/ru/docs/developers/remix_guide/index.html +++ b/ru/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Версия: последние

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/ru/docs/developers/setting-up-metamask/index.html b/ru/docs/developers/setting-up-metamask/index.html index 6d3617349e3..b5df95a6e22 100644 --- a/ru/docs/developers/setting-up-metamask/index.html +++ b/ru/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/ru/docs/intro/index.html b/ru/docs/intro/index.html index a19f99edb91..d3bdd05e1ce 100644 --- a/ru/docs/intro/index.html +++ b/ru/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Версия: последние

    👋 Добро пожаловать!

    Сеть Subspace - это амбициозный протокол с нулевым уровнем, который является первым масштабируемым, безопасным, & децентрализованным инфраструктурным слоем для экосистем Web3.

    ❓ Подробнее о сети Subspace


    🤝 Участвуйте в сети


    Наша цель состоит в том, чтобы обеспечить чрезвычайно низкий барьер для входа для участия в консенсусе, при условии, что вы соответствуете простым требованиям, приведенным ниже, вы можете приступить к работе.

    Начните фарминг с Pulsar

    📖 Разработка в сети Subspace


    Сеть Subspace стремится предоставить удивительный опыт разработчика всем, кто желает построить на вершине протокола. В этом случае мы начали работать над разнообразными инструментами для помощи в разработке в нашей сети.

    Разработка основного протокола

    - +
    Версия: последние

    👋 Добро пожаловать!

    Сеть Subspace - это амбициозный протокол с нулевым уровнем, который является первым масштабируемым, безопасным, & децентрализованным инфраструктурным слоем для экосистем Web3.

    ❓ Подробнее о сети Subspace


    🤝 Участвуйте в сети


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    Начните фарминг с Pulsar

    📖 Разработка в сети Subspace


    Сеть Subspace стремится предоставить удивительный опыт разработчика всем, кто желает построить на вершине протокола. В этом случае мы начали работать над разнообразными инструментами для помощи в разработке в нашей сети.

    Разработка основного протокола

    + \ No newline at end of file diff --git a/ru/docs/operators_and_staking/intro/index.html b/ru/docs/operators_and_staking/intro/index.html index 772a4af2434..449a5cd4a3d 100644 --- a/ru/docs/operators_and_staking/intro/index.html +++ b/ru/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/ru/docs/operators_and_staking/operators/index.html b/ru/docs/operators_and_staking/operators/index.html index 343ee69bd83..e789e986bb4 100644 --- a/ru/docs/operators_and_staking/operators/index.html +++ b/ru/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Версия: последние

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    инфо

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    инфо

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    инфо

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    инфо

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/ru/docs/operators_and_staking/staking/index.html b/ru/docs/operators_and_staking/staking/index.html index 2c4e36d2430..f2c046c09e7 100644 --- a/ru/docs/operators_and_staking/staking/index.html +++ b/ru/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Версия: последние

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    инфо

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/ru/docs/pre-release/category/community/index.html b/ru/docs/pre-release/category/community/index.html index 90c19490988..bdea1127fe8 100644 --- a/ru/docs/pre-release/category/community/index.html +++ b/ru/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ru/docs/pre-release/category/developer-documentation/index.html b/ru/docs/pre-release/category/developer-documentation/index.html index 1b551c6d4a7..7dfdde84bb5 100644 --- a/ru/docs/pre-release/category/developer-documentation/index.html +++ b/ru/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ru/docs/pre-release/category/get-started-with-farming/index.html b/ru/docs/pre-release/category/get-started-with-farming/index.html index da808be3e6c..35098c7327b 100644 --- a/ru/docs/pre-release/category/get-started-with-farming/index.html +++ b/ru/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Начните с фарминга

    Все ресурсы, предоставляемые сообществом, являются неофициальными. Для получения разъяснений обращайтесь к нашим официальным документам.

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/category/operators-and-staking/index.html b/ru/docs/pre-release/category/operators-and-staking/index.html index 5354b1d4a21..8900adaf4bd 100644 --- a/ru/docs/pre-release/category/operators-and-staking/index.html +++ b/ru/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Operators and Staking

    Subspace domain sub-protocols

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/category/wallets/index.html b/ru/docs/pre-release/category/wallets/index.html index 0268364e4ec..e816768b8d3 100644 --- a/ru/docs/pre-release/category/wallets/index.html +++ b/ru/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/ru/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/ru/docs/pre-release/community/CODE_OF_CONDUCT/index.html index a1dd0e135cb..f10a0e61d88 100644 --- a/ru/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/ru/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Кодекс поведения участников

    Обязательства

    Мы, как участники, помощники и лидеры, обязуемся сделать участие в нашем сообществе свободным от притеснений для всех, независимо от возраста, телосложения, видимых или невидимых недостатков, этнической принадлежности, половых характеристик, гендерной идентичности и самовыражения, уровня опыта, образования, социально-экономического статуса, национальности, внешности, расы, каста, цвет кожи, религии или сексуальная идентичность и ориентации.

    Мы обязуемся действовать и взаимодействовать таким образом, чтобы способствовать созданию открытого, гостеприимного, разнообразного, инклюзивного и здорового сообщества.

    Наши стандарты

    Примеры поведения, способствующего созданию позитивной атмосферы в нашем сообществе, включают:

    • Демонстрация сочувствия и доброты по отношению к другим людям
    • Уважительное отношение к различным мнениям, точкам зрения и опыту
    • Давать и изящно принимать конструктивную обратную связь
    • Брать ответственность и приносить извинения тем, кого затронули наши ошибки, и учиться на этом опыте
    • Сосредоточить внимание на том, что лучше не только для нас как отдельных людей, но и для всего сообщества в целом

    Примеры неприемлемого поведения включают:

    • Использование сексуализированных выражений или образов, а также сексуальное внимание или приставания любого рода
    • Издевательства, оскорбительные или уничижительные комментарии, а также личные или политические нападки
    • Публичное или частное домогательство
    • Публикация личной информации других людей, такой как физический адрес или адрес электронной почты, без их личного разрешения
    • Иное поведение, которое обоснованно считать неуместным в профессиональной обстановке

    Ответственность за исполнение

    Лидеры сообщества несут ответственность за разъяснение и обеспечение соблюдения наших стандартов приемлемого поведения и будут принимать соответствующие и справедливые корректирующие меры в ответ на любое поведение, которое они считают неуместным, угрожающим, оскорбительным или вредным.

    Лидеры сообщества имеют право и ответственность удалять, редактировать или отклонять комментарии, выражения, код, правки в вики, проблемы и другие материалы, которые не соответствуют настоящему Кодексу поведения, и при необходимости сообщат причины принятия решений модераторами.

    Сфера действия

    Данный Кодекс поведения применяется во всех общественных местах, а также в тех случаях, когда физическое лицо официально представляет сообщество в общественных местах. Примерами представления нашего сообщества являются использование официального адреса электронной почты, публикация через официальный аккаунт в социальных сетях или выступление в качестве назначенного представителя на онлайн- или офлайн-мероприятии.

    Обеспечение выполнения

    О случаях оскорбительного, притесняющего или иным образом неприемлемого поведения можно сообщать лидерам сообщества, ответственным за соблюдение правил в Subspace Network Discord. Все жалобы будут рассмотрены и расследованы быстро и справедливо.

    Все лидеры сообщества обязаны уважать конфиденциальность и безопасность сообщившего о любом инциденте.

    Главные принципы применения

    Лидеры сообщества будут следовать этим главным принципам воздействия на сообщество при определении последствий любых действий, которые они считают нарушением настоящего кодекса поведения:

    1. Коррекция

    Влияние на сообщества: использование непристойного языка или другого поведения, считающегося непрофессиональным или ненадлежащим в сообществе.

    Последствия: Личное письменное предупреждение от лидеров сообщества, содержащее ясность в отношении характера нарушения и объяснение того, почему поведение было неуместным. Может быть потребовано публичное извинение.

    2. Предупреждение

    Влияние на общество: Нарушение в результате одного инцидента или серии случаев.

    Последствия: Предупреждение с последствиями для дальнейшего поведения. В течение этого периода не допускается никакое публичное или частное взаимодействие с вовлеченными лицами, включая нежелательное взаимодействие с теми, кто следит за соблюдением Кодекса поведения. Это включает в себя отказ от взаимодействия на просторах сообщества, а также во внешних каналах, таких как социальные сети. Нарушение этих условий может привести к временной или постоянной блокировке.

    3. Временная блокировка

    Влияние на сообщество: Серьезное нарушение стандартов сообщества, включая продолжительное неподобающее поведение.

    Последствия: Временный запрет на любое взаимодействие или публичное общения с сообществом на определенный период времени. В течение этого периода не допускается никакое публичное или частное взаимодействие с вовлеченными лицами, включая нежелательное взаимодействие с теми, кто следит за соблюдением Кодекса поведения. Нарушение данных условий может привести к постоянному запрету.

    4. Постоянная блокировка

    Влияние на сообщество: Демонстрация модели нарушения стандартов сообщества, включая устойчивое неподобающее поведение, преследование отдельного лица или агрессию по отношению к группам лиц или пренебрежительное отношение к ним.

    Последствия: Постоянная блокировка на любое публичное взаимодействие в рамках сообщества.

    Авторство

    Этот Кодекс поведения адаптирован к Соглашение участников, версии 2.1, доступной по ссылке https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Руководство по влиянию на общество было основано на коде поведения Mozilla (Code of conduct enforcement ladder.

    Ответы на распространенные вопросы об этом кодексе поведения см. в разделе Часто задаваемые вопросы по адресу https://www.contributor-covenant.org/faq. Переводы доступны на https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/community/contribute/index.html b/ru/docs/pre-release/community/contribute/index.html index 156154946b1..f9bdbdad266 100644 --- a/ru/docs/pre-release/community/contribute/index.html +++ b/ru/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Вносим вклад в развитие!

    Правильный выбор!

    Прежде всего, спасибо Вам за то, что Вы решили внести свой вклад в развитие Subspace Network. Именно благодаря удивительному сотрудничеству таких людей, как вы, сообщество разработчиков открытого кода становится поистине удивительным. ❤️

    Помогите нам, а мы поможем вам!

    Соблюдение этих рекомендаций показывает, что вы уважаете время разработчиков, которые управляют и развивают этот проект с открытым исходным кодом. В свою очередь, они должны отвечать взаимностью на это, решая ваши проблемы, оценивая изменения и помогая вам завершить работу над вашими pull requests.

    Что я могу сделать?

    Мы являемся проектом с полностью открытым исходным кодом, что означает, что мы открыты для всех видов вклада со стороны нашего сообщества. Вот несколько примеров вкладов, к которым мы открыты:

    • Добавление контента: Вы написали хорошее руководство? Отправьте его на форум руководств.
    • Отчеты об ошибках и исправлениях: Нашли ошибку или недочет? Дайте нам знать, где она скрывается. Сообщите о ней на форуме поддержки.
    • Запрос и реализация функций: Хотите новую функцию? Поделитесь своими идеями, чтобы мы могли улучшить.

    Если у вас есть что-то, чего нет в списке, постарайтесь описать это как можно подробнее и не стесняйтесь отправить на pull request.

    Основные правила

    Пожалуйста, ознакомьтесь с нашим кодексом поведения.

    Ваш первый вклад

    Простое исправление

    Пожалуйста, воспользуйтесь этим гайдом для исправления незначительных ошибок, таких как орфографические ошибки, опечатки, неверные формулировки и т.д.

    Если вы добавляете совершенно новые страницы, функции и т.д., то обратитесь к разделу Advanced данного раздела.

    1. Перейдите в Subspace Documentation, и найдите страницу, которую вы хотели бы изменить.
    2. Прокрутите вниз и нажмите кнопку Edit this page.
    3. Откроется GitHub, и вы будете перенаправлены на страницу с исходными данными.
    4. В правом верхнем углу нажмите на эмодзи карандаша для редактирования страницы.
    5. GitHub изменит страницу на текстовый редактор, в котором можно будет вносить изменения.
    6. После того как изменения будут внесены, прокрутите страницу вниз и заполните следующие поля.
      • Заполните заголовок
      • Заполните описание
      • Нажмите на Create a new branch for this commit and start a pull request.
    7. Нажмите на Propose Changes
    8. Справа вы увидите несколько вариантов labels, вы можете применить наиболее точные из перечисленных.
    9. Нажмите Create Pull Request

    🎉Поздравляем! Вы только что отправили свой первый pull request! Пожалуйста, дайте некоторое время команде просмотреть ваш запрос и одобрить его, либо запросить корректировки.

    Никогда раньше не делали вклад?

    Не стоит беспокоиться! Все мы с чего-то начинаем 🚀 В Интернете есть несколько видеороликов и ресурсов, демонстрирующих различные способы использования GitHub. Ознакомьтесь с некоторыми из этих замечательных руководств, которые помогут вам освоить GitHub и внести свой вклад.

    Продвинутое исправление

    Этот раздел предполагает более глубокое понимание GitHub, а также основ программирования.

    При выполнении более крупных и сложных работ по устранению неисправностей необходимо следовать приведенным ниже основным принципам.

    • Не комментируйте простой и тривиальный код, такой как импорт существующих компонентов и базовый HTML/CSS.
    • Комментируйте сложный и нетривиальный код, сложная логика должна быть понятна.
    • Все публичные функции должны быть прокомментированы.
    • Если код тривиален, но со временем может быть забыт, пожалуйста, прокомментируйте его.
    • Попробуйте взглянуть на свой код от третьего лица, он должен быть понятен любому человеку, имеющему опыт работы с технологией, которую вы используете.
    • Иногда сложный для понимания код нуждается в рефакторинге, а не в дополнительных комментариях.
    • Убедитесь, что программа все еще может быть создана и запущена до подачи pull request.

    Для более сложных исправлений следует следовать общему пути GitHub.

    1. Создайте свой собственный форк кода. Форк
    2. Выполните изменения локально на своей системе в предпочитаемой среде разработки.
    3. Следуйте README.md инструкции, тестируйте изменения локально при помощи yarn build и yarn run serve или npm build и npm run serve чтобы убедиться в отсутствии явных проблем.
    4. Внесите изменения в свой форк и отправьте запрос на pull request, сравнивая между собой форки. Отправить Pull Request

    Как сообщить об ошибке или неисправности

    У нас нет какого-либо строгого шаблона, которому вы должны следовать, но, пожалуйста, предоставьте всю необходимую информацию, чтобы мы могли быстро решить любые вопросы.

    • Если вы обнаружили реальную ошибку в коде, пожалуйста, отправьте ее на GitHub и используйте метку bug.
    • Если вы обнаружили грамматическую/орфографическую/содержательную ошибку, пожалуйста, отправьте ее на GitHub, используя метку documentation.

    Как предложить функцию или улучшение

    Эта документация предназначена для сообщества, поэтому любые пожелания по функциям приветствуются.

    • Если вы запрашиваете какую-либо функцию, пожалуйста, отправьте запрос на GitHub и используйте метку enhancement.
    • Объясните, зачем нужна эта функция и какие проблемы она позволит решить.
    • Укажите, можете ли вы/хотите ли вы помочь в реализации этой функции.

    Процесс рецензирования кода

    • Команда рассмотрит все запросы (pull requests) на внесение изменений как можно скорее, обычно ответ приходит в течение одного-двух дней.
    • Если это простое и непротиворечивое исправление, мы рассмотрим и одобрим код.
    • Если возникнут вопросы, замечания или потребуется дополнительное обсуждение, мы свяжемся с автором Pull Request, чтобы попытаться решить эти вопросы.
    • При отсутствии ответа или активности в течение 2 недель после ответа команды мы можем закрыть pull request.

    Сообщество

    Вы можете пообщаться с командой в Discord: https://discord.gg/subspace-network

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/community/index.html b/ru/docs/pre-release/community/index.html index ca9f69d29ab..d17f8f422e2 100644 --- a/ru/docs/pre-release/community/index.html +++ b/ru/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Удивительный SubSpace

    осторожность

    Пожалуйста, обратите внимание, что все ресурсы, предоставляемые сообществом, являются неофициальными. For clarification please refer to official materials.

    Группы сообщества


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - Русское Discord сообщество

    🇺🇦 - Украинское Discord сообщество

    Переводы сообщества

    Whitepaper

    Статьи

    Информация

    F.A.Q

    Getting Started Farming

    Medium

    Руководство по началу работы

    Приведение консенсуса PoC до Substrate

    Subspace - первый протокол, полностью разрешающий трилемму блокчейна без компромиссов. Provided by solgas

    События

    Первая АМА

    Мемы и Юмор


    - + \ No newline at end of file diff --git a/ru/docs/pre-release/community/translate/index.html b/ru/docs/pre-release/community/translate/index.html index 3652712532c..c3c633b7222 100644 --- a/ru/docs/pre-release/community/translate/index.html +++ b/ru/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Руководство по переводу

    Руководство по переводу

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Требования

    Рекомендации

    Инструкция

    Ниже вы найдете информацию о том, как обеспечить переводы для сети Subspace через портал переводов Crowdin.

    1. Посетите соответствующий портал переводов, для которого вы хотели бы помочь с переводом (см. выше)

      перевод-шаг-1

    2. Как только вы войдете в проект и присоединитесь к нему, вы будете перенаправлены на панель инструментов проекта, выберите язык, который вы хотите перевести. (см. ниже)

      перевод шаг-2

    3. Вы окажетесь на экране со всеми исходными файлами в списке, выберите Перевести все вверху справа (см. ниже)

      перевод-шаг-3

    4. Затем вы попадете на портал переводов, на этом портале вы найдете следующее

      1. Английская версия текста
      2. Укажите язык ввода перевода английского текста
      3. Автоматическое предложение текста
      4. Список слов, который необходимо перевести
      5. Точка для комментариев, если что-то нуждается в пояснениях

      перевод шаг-4

    5. Отсюда вы сможете заполнить ваши переводы, как только захотите, и завершите работу.

    6. Ваш перевод будет рассмотрен и одобрен своевременно, пожалуйста, обратите внимание, что перевод может занять пару дней, прежде чем он появится в развернутой документации.

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/developers/block_explorer/index.html b/ru/docs/pre-release/developers/block_explorer/index.html index b48ef41354a..953df1b9cea 100644 --- a/ru/docs/pre-release/developers/block_explorer/index.html +++ b/ru/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/developers/faucet/index.html b/ru/docs/pre-release/developers/faucet/index.html index 5bcbd52833c..6956b5f2364 100644 --- a/ru/docs/pre-release/developers/faucet/index.html +++ b/ru/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/developers/foundry_guide/index.html b/ru/docs/pre-release/developers/foundry_guide/index.html index 0b81b5bbe3f..e3935d72f58 100644 --- a/ru/docs/pre-release/developers/foundry_guide/index.html +++ b/ru/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Версия: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/developers/general-information/index.html b/ru/docs/pre-release/developers/general-information/index.html index 38b8a878310..e8aa9910429 100644 --- a/ru/docs/pre-release/developers/general-information/index.html +++ b/ru/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/developers/hardhat_guide/index.html b/ru/docs/pre-release/developers/hardhat_guide/index.html index 8b5b624b4e3..8a268c6c87a 100644 --- a/ru/docs/pre-release/developers/hardhat_guide/index.html +++ b/ru/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/ru/docs/pre-release/developers/intro/index.html b/ru/docs/pre-release/developers/intro/index.html index ffb97b9708f..1669cfeb78f 100644 --- a/ru/docs/pre-release/developers/intro/index.html +++ b/ru/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/developers/local_development/index.html b/ru/docs/pre-release/developers/local_development/index.html index 86dd6734ad0..06b89105887 100644 --- a/ru/docs/pre-release/developers/local_development/index.html +++ b/ru/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/developers/quick_start/index.html b/ru/docs/pre-release/developers/quick_start/index.html index 698ffe28b69..520b0ae8289 100644 --- a/ru/docs/pre-release/developers/quick_start/index.html +++ b/ru/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/developers/remix_guide/index.html b/ru/docs/pre-release/developers/remix_guide/index.html index 3ceac7442fb..1f238ed7e78 100644 --- a/ru/docs/pre-release/developers/remix_guide/index.html +++ b/ru/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Версия: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/developers/setting-up-metamask/index.html b/ru/docs/pre-release/developers/setting-up-metamask/index.html index 4f56a4ca459..8906581c987 100644 --- a/ru/docs/pre-release/developers/setting-up-metamask/index.html +++ b/ru/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/intro/index.html b/ru/docs/pre-release/intro/index.html index 6948e57a81c..4ba067f7219 100644 --- a/ru/docs/pre-release/intro/index.html +++ b/ru/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    👋 Добро пожаловать!

    Сеть Subspace - это амбициозный протокол с нулевым уровнем, который является первым масштабируемым, безопасным, & децентрализованным инфраструктурным слоем для экосистем Web3.

    ❓ Подробнее о сети Subspace


    🤝 Участвуйте в сети


    Наша цель состоит в том, чтобы обеспечить чрезвычайно низкий барьер для входа для участия в консенсусе, при условии, что вы соответствуете простым требованиям, приведенным ниже, вы можете приступить к работе.

    Начните фарминг с Pulsar

    📖 Разработка в сети Subspace


    Сеть Subspace стремится предоставить удивительный опыт разработчика всем, кто желает построить на вершине протокола. В этом случае мы начали работать над разнообразными инструментами для помощи в разработке в нашей сети.

    Разработка основного протокола

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/operators_and_staking/intro/index.html b/ru/docs/pre-release/operators_and_staking/intro/index.html index 6d8eb59b811..af10b5c17bd 100644 --- a/ru/docs/pre-release/operators_and_staking/intro/index.html +++ b/ru/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/operators_and_staking/operators/index.html b/ru/docs/pre-release/operators_and_staking/operators/index.html index b24bd8f472b..77011fb0565 100644 --- a/ru/docs/pre-release/operators_and_staking/operators/index.html +++ b/ru/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Версия: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    инфо

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    инфо

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    инфо

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    инфо

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/operators_and_staking/staking/index.html b/ru/docs/pre-release/operators_and_staking/staking/index.html index abc5512ae7d..6780ee265dd 100644 --- a/ru/docs/pre-release/operators_and_staking/staking/index.html +++ b/ru/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Версия: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    инфо

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/ru/docs/pre-release/protocol/common_problems/index.html b/ru/docs/pre-release/protocol/common_problems/index.html index 896f181d2ed..331e84460d6 100644 --- a/ru/docs/pre-release/protocol/common_problems/index.html +++ b/ru/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/protocol/port-forwarding/index.html b/ru/docs/pre-release/protocol/port-forwarding/index.html index db70c73298d..6471a57e5b9 100644 --- a/ru/docs/pre-release/protocol/port-forwarding/index.html +++ b/ru/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Версия: Pre-Release

    How to Forward Ports

    осторожность

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/ru/docs/pre-release/protocol/pulsar/index.html b/ru/docs/pre-release/protocol/pulsar/index.html index c8d9631c300..b2691b69712 100644 --- a/ru/docs/pre-release/protocol/pulsar/index.html +++ b/ru/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    осторожность

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    инфо

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/protocol/security/index.html b/ru/docs/pre-release/protocol/security/index.html index 7133e9279d4..356f7b43a58 100644 --- a/ru/docs/pre-release/protocol/security/index.html +++ b/ru/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/protocol/substrate-cli/index.html b/ru/docs/pre-release/protocol/substrate-cli/index.html index c5c5565cfec..02ff8644c1c 100644 --- a/ru/docs/pre-release/protocol/substrate-cli/index.html +++ b/ru/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/protocol/timekeeping/index.html b/ru/docs/pre-release/protocol/timekeeping/index.html index b3516eadb8d..4e1b7b8696d 100644 --- a/ru/docs/pre-release/protocol/timekeeping/index.html +++ b/ru/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareХарактеристики
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/ru/docs/pre-release/protocol/wallets/polkadot/index.html b/ru/docs/pre-release/protocol/wallets/polkadot/index.html index c8ac318d72e..0f0efbddeb0 100644 --- a/ru/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/ru/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    Polkadot.js

    note

    Polkadot.js - это Substrate/EVM-кошелек, созданный командой Parity Team, которая также создала Substrate & Polkadota/Kusama.

    Это самый простой кошелек. Это связано с тем, что он является базовым кошельком Substrate, поддерживающим все сети на основе Substrate. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Polkadot.js - это Substrate/EVM-кошелек, от создателей Substrate и Polkadota/Kusama, а именно, от команды Parity.

    1. Перейдите на сайт Polkadot.js и загрузите соответствующую версию.

      Опция Chrome будет работать во всех браузерах на базе Chromium, таких как Brave, Vivaldi, & Edge

    2. После установки расширения, откройте его и нажмите +, & Создать новую учетную запись

      шаг-2

    3. После этого расширение покажет вам вашу мнемоническую комбинацию из 12 слов.

      УБЕДИТЕСЬ, ЧТО ВЫ НАДЕЖНО ХРАНИТЕ ЭТУ ИНФОРМАЦИЮ И НИКОГДА НЕ ДЕЛИТЕСЬ ЕЮ

      шаг-3

    4. После того как вы сохраните вашу мнемоническую фразу, установите флажок "Я надежно сохранил свою мнемоническую фразу" и нажмите кнопку "Следующий шаг".

    5. На следующем шаге будет предложено ввести имя и пароль для кошелька. После нажмите кнопку "Добавить учетную запись".

      шаг-5

    6. Поздравляем, вы создали кошелек polkadot.js!

      шаг-6

    Импортировать существующую мнемонику

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      шаг-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      шаг-3a

    4. На следующем шаге будет предложено ввести имя и пароль для кошелька. then click Add the account with the supplied seed

      шаг-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      проблема -1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      проблема-2

      проблема -10

    Я не вижу Subspace Testnet или любые Subspace сети в качестве параметра

    • Как показано ниже, иногда при первой установке или обновлении кошелька Substrate требуется обновить метаданные кошелька.

      проблема -3

    1. Перейдите в Subspace/Polkadot Explorer: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      проблема-4

    3. On the Webpage, click settings

      проблема-5

    4. Click Metadata

      проблема-6

    5. Click Update Metadata

      проблема-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      проблема-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      проблема-9

    Как сделать резервную копию моего кошелька?

    1. Вы можете сделать резервное копирование/экспорт вашего кошелька через меню, для этого нажмите ... и Экспорт аккаунта

      проблема-11

    2. Затем введите пароль кошелька и нажмите я хочу экспортировать эту учетную запись

      проблема-12

    - + \ No newline at end of file diff --git a/ru/docs/pre-release/protocol/wallets/subwallet/index.html b/ru/docs/pre-release/protocol/wallets/subwallet/index.html index b9cb2d417d9..dac762c1cb6 100644 --- a/ru/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/ru/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,13 +7,13 @@ - +
    Версия: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      шаг-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![шаг-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      УБЕДИТЕСЬ, ЧТО ВЫ НАДЕЖНО ХРАНИТЕ ЭТУ ИНФОРМАЦИЮ И НИКОГДА НЕ ДЕЛИТЕСЬ ЕЮ

      шаг-5

    2. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      шаг-6

    3. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    4. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    осторожность

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      проблема -1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    Я не вижу Subspace Testnet или любые Subspace сети в качестве параметра

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Перейдите в Subspace/Polkadot Explorer: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      проблема-4

    3. On the Webpage, click settings

      проблема-5

    4. Click Metadata

      проблема-6

    5. Click Update Metadata

      проблема -3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      проблема-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      проблема-9

    Как сделать резервную копию моего кошелька?

    1. Вы можете сделать резервное копирование/экспорт вашего кошелька через меню, для этого нажмите ... и Экспорт аккаунта

      проблема-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      проблема-7

    - + \ No newline at end of file diff --git a/ru/docs/protocol/common_problems/index.html b/ru/docs/protocol/common_problems/index.html index 48dfd200681..00ceaa58962 100644 --- a/ru/docs/protocol/common_problems/index.html +++ b/ru/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/ru/docs/protocol/port-forwarding/index.html b/ru/docs/protocol/port-forwarding/index.html index dd798e37c66..61db8e767a2 100644 --- a/ru/docs/protocol/port-forwarding/index.html +++ b/ru/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Версия: последние

    How to Forward Ports

    осторожность

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/ru/docs/protocol/pulsar/index.html b/ru/docs/protocol/pulsar/index.html index f572e02a897..22b5a7a0264 100644 --- a/ru/docs/protocol/pulsar/index.html +++ b/ru/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    осторожность

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Предупреждение

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    инфо

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ru/docs/protocol/security/index.html b/ru/docs/protocol/security/index.html index e27114861ba..99294eb00bc 100644 --- a/ru/docs/protocol/security/index.html +++ b/ru/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/ru/docs/protocol/substrate-cli/index.html b/ru/docs/protocol/substrate-cli/index.html index 095689fa04e..aa0a4ca937b 100644 --- a/ru/docs/protocol/substrate-cli/index.html +++ b/ru/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/ru/docs/protocol/timekeeping/index.html b/ru/docs/protocol/timekeeping/index.html index 491e5cbc4c5..3ea1444edee 100644 --- a/ru/docs/protocol/timekeeping/index.html +++ b/ru/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareХарактеристики
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/ru/docs/protocol/wallets/polkadot/index.html b/ru/docs/protocol/wallets/polkadot/index.html index b345f9b66fc..f6167e6b996 100644 --- a/ru/docs/protocol/wallets/polkadot/index.html +++ b/ru/docs/protocol/wallets/polkadot/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    Polkadot.js

    note

    Polkadot.js - это Substrate/EVM-кошелек, созданный командой Parity Team, которая также создала Substrate & Polkadota/Kusama.

    Это самый простой кошелек. Это связано с тем, что он является базовым кошельком Substrate, поддерживающим все сети на основе Substrate. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Polkadot.js - это Substrate/EVM-кошелек, от создателей Substrate и Polkadota/Kusama, а именно, от команды Parity.

    1. Перейдите на сайт Polkadot.js и загрузите соответствующую версию.

      Опция Chrome будет работать во всех браузерах на базе Chromium, таких как Brave, Vivaldi, & Edge

    2. После установки расширения, откройте его и нажмите +, & Создать новую учетную запись

      шаг-2

    3. После этого расширение покажет вам вашу мнемоническую комбинацию из 12 слов.

      УБЕДИТЕСЬ, ЧТО ВЫ НАДЕЖНО ХРАНИТЕ ЭТУ ИНФОРМАЦИЮ И НИКОГДА НЕ ДЕЛИТЕСЬ ЕЮ

      шаг-3

    4. После того как вы сохраните вашу мнемоническую фразу, установите флажок "Я надежно сохранил свою мнемоническую фразу" и нажмите кнопку "Следующий шаг".

    5. На следующем шаге будет предложено ввести имя и пароль для кошелька. После нажмите кнопку "Добавить учетную запись".

      шаг-5

    6. Поздравляем, вы создали кошелек polkadot.js!

      шаг-6

    Импортировать существующую мнемонику

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      шаг-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      шаг-3a

    4. На следующем шаге будет предложено ввести имя и пароль для кошелька. then click Add the account with the supplied seed

      шаг-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      проблема -1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      проблема-2

      проблема -10

    Я не вижу Subspace Testnet или любые Subspace сети в качестве параметра

    • Как показано ниже, иногда при первой установке или обновлении кошелька Substrate требуется обновить метаданные кошелька.

      проблема -3

    1. Перейдите в Subspace/Polkadot Explorer: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      проблема-4

    3. On the Webpage, click settings

      проблема-5

    4. Click Metadata

      проблема-6

    5. Click Update Metadata

      проблема-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      проблема-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      проблема-9

    Как сделать резервную копию моего кошелька?

    1. Вы можете сделать резервное копирование/экспорт вашего кошелька через меню, для этого нажмите ... и Экспорт аккаунта

      проблема-11

    2. Затем введите пароль кошелька и нажмите я хочу экспортировать эту учетную запись

      проблема-12

    - + \ No newline at end of file diff --git a/ru/docs/protocol/wallets/subwallet/index.html b/ru/docs/protocol/wallets/subwallet/index.html index 3b82c806822..05c0735742d 100644 --- a/ru/docs/protocol/wallets/subwallet/index.html +++ b/ru/docs/protocol/wallets/subwallet/index.html @@ -7,13 +7,13 @@ - +
    Версия: последние

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      шаг-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![шаг-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      УБЕДИТЕСЬ, ЧТО ВЫ НАДЕЖНО ХРАНИТЕ ЭТУ ИНФОРМАЦИЮ И НИКОГДА НЕ ДЕЛИТЕСЬ ЕЮ

      шаг-5

    2. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      шаг-6

    3. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    4. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    осторожность

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      проблема -1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    Я не вижу Subspace Testnet или любые Subspace сети в качестве параметра

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Перейдите в Subspace/Polkadot Explorer: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      проблема-4

    3. On the Webpage, click settings

      проблема-5

    4. Click Metadata

      проблема-6

    5. Click Update Metadata

      проблема -3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      проблема-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      проблема-9

    Как сделать резервную копию моего кошелька?

    1. Вы можете сделать резервное копирование/экспорт вашего кошелька через меню, для этого нажмите ... и Экспорт аккаунта

      проблема-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      проблема-7

    - + \ No newline at end of file diff --git a/ru/index.html b/ru/index.html index f9b1e377da4..57bbf8b623a 100644 --- a/ru/index.html +++ b/ru/index.html @@ -7,13 +7,13 @@ - +

    Ферма отовсюду

    Зарабатывайте награды, запуская фермерский узел, обещая свободный диск. Не требуется дорогая настройка или предварительный капитал.

    Лёгкий

    'Запустите фармерский узел в фоновом режиме на вашем компьютере без ущерба для ежедневного использования и с минимальным обслуживанием.'

    'Простота настройки'

    'Настройка приложения занимает всего несколько минут. Поддерживаются операционные системы Linux, Windows и macOS.'

    'Частые вознаграждения'

    'Получайте вознаграждение, внося свой вклад в глобально распределенную сеть, которая возвращает контроль пользователям и создателям.'

    - + \ No newline at end of file diff --git a/ru/markdown-page/index.html b/ru/markdown-page/index.html index 801fbcb711d..9da493cb21e 100644 --- a/ru/markdown-page/index.html +++ b/ru/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/tr/404.html b/tr/404.html index c0a7577348a..9c3e3a8bb28 100644 --- a/tr/404.html +++ b/tr/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/tr/assets/js/95c89216.ce1dfcd3.js b/tr/assets/js/95c89216.a70dcced.js similarity index 73% rename from tr/assets/js/95c89216.ce1dfcd3.js rename to tr/assets/js/95c89216.a70dcced.js index 2b29d0a07ff..dd7e67a82f3 100644 --- a/tr/assets/js/95c89216.ce1dfcd3.js +++ b/tr/assets/js/95c89216.a70dcced.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[1525],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/tr/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/tr/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/tr/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/tr/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/tr/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[1525],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/tr/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/tr/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/tr/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/tr/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/tr/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/tr/assets/js/runtime~main.4d376ae0.js b/tr/assets/js/runtime~main.2eb07c91.js similarity index 99% rename from tr/assets/js/runtime~main.4d376ae0.js rename to tr/assets/js/runtime~main.2eb07c91.js index c5540689173..ec9204aa9d2 100644 --- a/tr/assets/js/runtime~main.4d376ae0.js +++ b/tr/assets/js/runtime~main.2eb07c91.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,t,d={},r={};function b(e){var f=r[e];if(void 0!==f)return f.exports;var a=r[e]={exports:{}};return d[e].call(a.exports,a,a.exports,b),a.exports}b.m=d,e=[],b.O=(f,a,c,t)=>{if(!a){var d=1/0;for(i=0;i=t)&&Object.keys(b.O).every((e=>b.O[e](a[o])))?a.splice(o--,1):(r=!1,t0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[a,c,t]},b.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return b.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var d={};f=f||[null,a({}),a([]),a(a)];for(var r=2&c&&e;"object"==typeof r&&!~f.indexOf(r);r=a(r))Object.getOwnPropertyNames(r).forEach((f=>d[f]=()=>e[f]));return d.default=()=>e,b.d(t,d),t},b.d=(e,f)=>{for(var a in f)b.o(f,a)&&!b.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((f,a)=>(b.f[a](e,f),f)),[])),b.u=e=>"assets/js/"+({21:"10f1fca5",24:"5c8b63ea",53:"935f2afb",120:"5e3811a3",159:"19142742",212:"257cbe58",225:"36731b7e",283:"0be16c25",305:"d261c35e",472:"1f1f6ce6",1229:"91ddb325",1333:"40f95f8d",1525:"95c89216",1648:"d417a90c",1662:"ec9b8e07",1664:"8d7f737c",1724:"90bff5a1",1745:"f1807a82",2156:"06b17f7f",2183:"c8042bad",2585:"9c9425d1",2594:"e0afa469",2754:"f63d625c",2902:"709961f8",2937:"6bc43ac7",3085:"1f391b9e",3136:"f6d61fbd",3215:"4c55358b",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3481:"8377cfc4",3626:"b6a06018",3762:"61748cd1",3991:"8fadb4aa",3994:"1a10a6ac",4046:"2cd1cc61",4119:"2734a8cb",4324:"fa9ea33a",4516:"83ffcfc7",4799:"01cc436f",5429:"c0c56fde",5435:"5168c444",5673:"bfd7cda6",5774:"54b007f9",5885:"3aad01b6",6062:"789b9187",6346:"ede748b0",7127:"f3c2a85b",7200:"54c9b52d",7281:"5326ae13",7370:"c09f4ff7",7372:"98153899",7379:"31005c87",7414:"393be207",7423:"7ed59f5b",7498:"52b604af",7550:"672ba256",7554:"cea0f3cc",7565:"4165a353",7573:"1866ef2b",7722:"3af40de9",7883:"080faf05",7918:"17896441",8272:"30c86ab3",8440:"325f60ea",8635:"6a26a178",9037:"720811ff",9514:"1be78505",9550:"54ca51a6",9616:"1056a7f7",9817:"14eb3368"}[e]||e)+"."+{21:"9a6613b4",24:"ece7995f",53:"d3542191",120:"2fe6cac0",159:"a589c0b3",212:"8aadc3a6",225:"4d1f4fcd",283:"7496f3c0",305:"663e309a",472:"78773789",814:"dc8c3a26",1229:"64c50a7f",1333:"c9134e4c",1525:"ce1dfcd3",1648:"6c76c2ec",1662:"9711072d",1664:"79bacbe9",1724:"2f1b441c",1745:"b830b104",2156:"2bfd1f94",2183:"0b323079",2585:"986f4ec9",2594:"e4042d39",2754:"977097a6",2902:"794b99e6",2937:"9f836091",3085:"3a447380",3136:"e9068e18",3203:"d4e13d9e",3215:"6c8e37b6",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3481:"741e5d9d",3626:"d8379737",3762:"fc391dfe",3991:"05429602",3994:"fadd737d",4046:"812f063b",4119:"041a2e68",4324:"5b23a02c",4516:"c536db33",4799:"f8fb6f05",4972:"4a54fd4a",5429:"ef864d33",5435:"cc9f83a3",5673:"e6164e6f",5774:"cdfff0c7",5885:"92d6ff4b",6062:"317c231a",6346:"b75bf21f",7127:"a4f70fb7",7200:"977e9b94",7281:"60b9b268",7370:"eaa97a07",7372:"bc8623de",7379:"479f4c83",7414:"7697c324",7423:"a1da01ed",7498:"2f513a16",7550:"adaa06b7",7554:"b883d5e9",7565:"eaa660f9",7573:"ff6e6091",7722:"c53a9152",7883:"8bb2252f",7918:"e3da5265",8272:"c9b36f3f",8440:"e636a257",8635:"fa620fb1",9037:"620057ca",9514:"478c02c6",9550:"d026cb7d",9616:"d25dff63",9817:"b7ea7ab7"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},t="portal:",b.l=(e,f,a,d)=>{if(c[e])c[e].push(f);else{var r,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(s);var t=c[e];if(delete c[e],r.parentNode&&r.parentNode.removeChild(r),t&&t.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=l.bind(null,r.onerror),r.onload=l.bind(null,r.onload),o&&document.head.appendChild(r)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/tr/",b.gca=function(e){return e={17896441:"7918",19142742:"159",98153899:"7372","10f1fca5":"21","5c8b63ea":"24","935f2afb":"53","5e3811a3":"120","257cbe58":"212","36731b7e":"225","0be16c25":"283",d261c35e:"305","1f1f6ce6":"472","91ddb325":"1229","40f95f8d":"1333","95c89216":"1525",d417a90c:"1648",ec9b8e07:"1662","8d7f737c":"1664","90bff5a1":"1724",f1807a82:"1745","06b17f7f":"2156",c8042bad:"2183","9c9425d1":"2585",e0afa469:"2594",f63d625c:"2754","709961f8":"2902","6bc43ac7":"2937","1f391b9e":"3085",f6d61fbd:"3136","4c55358b":"3215",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","8377cfc4":"3481",b6a06018:"3626","61748cd1":"3762","8fadb4aa":"3991","1a10a6ac":"3994","2cd1cc61":"4046","2734a8cb":"4119",fa9ea33a:"4324","83ffcfc7":"4516","01cc436f":"4799",c0c56fde:"5429","5168c444":"5435",bfd7cda6:"5673","54b007f9":"5774","3aad01b6":"5885","789b9187":"6062",ede748b0:"6346",f3c2a85b:"7127","54c9b52d":"7200","5326ae13":"7281",c09f4ff7:"7370","31005c87":"7379","393be207":"7414","7ed59f5b":"7423","52b604af":"7498","672ba256":"7550",cea0f3cc:"7554","4165a353":"7565","1866ef2b":"7573","3af40de9":"7722","080faf05":"7883","30c86ab3":"8272","325f60ea":"8440","6a26a178":"8635","720811ff":"9037","1be78505":"9514","54ca51a6":"9550","1056a7f7":"9616","14eb3368":"9817"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(f,a)=>{var c=b.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var t=new Promise(((a,t)=>c=e[f]=[a,t]));a.push(c[2]=t);var d=b.p+b.u(f),r=new Error;b.l(d,(a=>{if(b.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var t=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;r.message="Loading chunk "+f+" failed.\n("+t+": "+d+")",r.name="ChunkLoadError",r.type=t,r.request=d,c[1](r)}}),"chunk-"+f,f)}},b.O.j=f=>0===e[f];var f=(f,a)=>{var c,t,d=a[0],r=a[1],o=a[2],n=0;if(d.some((f=>0!==e[f]))){for(c in r)b.o(r,c)&&(b.m[c]=r[c]);if(o)var i=o(b)}for(f&&f(a);n{"use strict";var e,f,a,c,t,d={},r={};function b(e){var f=r[e];if(void 0!==f)return f.exports;var a=r[e]={exports:{}};return d[e].call(a.exports,a,a.exports,b),a.exports}b.m=d,e=[],b.O=(f,a,c,t)=>{if(!a){var d=1/0;for(i=0;i=t)&&Object.keys(b.O).every((e=>b.O[e](a[o])))?a.splice(o--,1):(r=!1,t0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[a,c,t]},b.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return b.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var d={};f=f||[null,a({}),a([]),a(a)];for(var r=2&c&&e;"object"==typeof r&&!~f.indexOf(r);r=a(r))Object.getOwnPropertyNames(r).forEach((f=>d[f]=()=>e[f]));return d.default=()=>e,b.d(t,d),t},b.d=(e,f)=>{for(var a in f)b.o(f,a)&&!b.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((f,a)=>(b.f[a](e,f),f)),[])),b.u=e=>"assets/js/"+({21:"10f1fca5",24:"5c8b63ea",53:"935f2afb",120:"5e3811a3",159:"19142742",212:"257cbe58",225:"36731b7e",283:"0be16c25",305:"d261c35e",472:"1f1f6ce6",1229:"91ddb325",1333:"40f95f8d",1525:"95c89216",1648:"d417a90c",1662:"ec9b8e07",1664:"8d7f737c",1724:"90bff5a1",1745:"f1807a82",2156:"06b17f7f",2183:"c8042bad",2585:"9c9425d1",2594:"e0afa469",2754:"f63d625c",2902:"709961f8",2937:"6bc43ac7",3085:"1f391b9e",3136:"f6d61fbd",3215:"4c55358b",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3481:"8377cfc4",3626:"b6a06018",3762:"61748cd1",3991:"8fadb4aa",3994:"1a10a6ac",4046:"2cd1cc61",4119:"2734a8cb",4324:"fa9ea33a",4516:"83ffcfc7",4799:"01cc436f",5429:"c0c56fde",5435:"5168c444",5673:"bfd7cda6",5774:"54b007f9",5885:"3aad01b6",6062:"789b9187",6346:"ede748b0",7127:"f3c2a85b",7200:"54c9b52d",7281:"5326ae13",7370:"c09f4ff7",7372:"98153899",7379:"31005c87",7414:"393be207",7423:"7ed59f5b",7498:"52b604af",7550:"672ba256",7554:"cea0f3cc",7565:"4165a353",7573:"1866ef2b",7722:"3af40de9",7883:"080faf05",7918:"17896441",8272:"30c86ab3",8440:"325f60ea",8635:"6a26a178",9037:"720811ff",9514:"1be78505",9550:"54ca51a6",9616:"1056a7f7",9817:"14eb3368"}[e]||e)+"."+{21:"9a6613b4",24:"ece7995f",53:"d3542191",120:"2fe6cac0",159:"a589c0b3",212:"8aadc3a6",225:"4d1f4fcd",283:"7496f3c0",305:"663e309a",472:"78773789",814:"dc8c3a26",1229:"64c50a7f",1333:"c9134e4c",1525:"a70dcced",1648:"6c76c2ec",1662:"9711072d",1664:"79bacbe9",1724:"2f1b441c",1745:"b830b104",2156:"2bfd1f94",2183:"0b323079",2585:"986f4ec9",2594:"e4042d39",2754:"977097a6",2902:"794b99e6",2937:"9f836091",3085:"3a447380",3136:"e9068e18",3203:"d4e13d9e",3215:"6c8e37b6",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3481:"741e5d9d",3626:"d8379737",3762:"fc391dfe",3991:"05429602",3994:"fadd737d",4046:"812f063b",4119:"041a2e68",4324:"5b23a02c",4516:"c536db33",4799:"f8fb6f05",4972:"4a54fd4a",5429:"ef864d33",5435:"cc9f83a3",5673:"e6164e6f",5774:"cdfff0c7",5885:"92d6ff4b",6062:"317c231a",6346:"b75bf21f",7127:"a4f70fb7",7200:"977e9b94",7281:"60b9b268",7370:"eaa97a07",7372:"bc8623de",7379:"479f4c83",7414:"7697c324",7423:"a1da01ed",7498:"2f513a16",7550:"adaa06b7",7554:"b883d5e9",7565:"eaa660f9",7573:"ff6e6091",7722:"c53a9152",7883:"8bb2252f",7918:"e3da5265",8272:"c9b36f3f",8440:"e636a257",8635:"fa620fb1",9037:"620057ca",9514:"478c02c6",9550:"d026cb7d",9616:"d25dff63",9817:"b7ea7ab7"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},t="portal:",b.l=(e,f,a,d)=>{if(c[e])c[e].push(f);else{var r,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(s);var t=c[e];if(delete c[e],r.parentNode&&r.parentNode.removeChild(r),t&&t.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=l.bind(null,r.onerror),r.onload=l.bind(null,r.onload),o&&document.head.appendChild(r)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/tr/",b.gca=function(e){return e={17896441:"7918",19142742:"159",98153899:"7372","10f1fca5":"21","5c8b63ea":"24","935f2afb":"53","5e3811a3":"120","257cbe58":"212","36731b7e":"225","0be16c25":"283",d261c35e:"305","1f1f6ce6":"472","91ddb325":"1229","40f95f8d":"1333","95c89216":"1525",d417a90c:"1648",ec9b8e07:"1662","8d7f737c":"1664","90bff5a1":"1724",f1807a82:"1745","06b17f7f":"2156",c8042bad:"2183","9c9425d1":"2585",e0afa469:"2594",f63d625c:"2754","709961f8":"2902","6bc43ac7":"2937","1f391b9e":"3085",f6d61fbd:"3136","4c55358b":"3215",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280","8377cfc4":"3481",b6a06018:"3626","61748cd1":"3762","8fadb4aa":"3991","1a10a6ac":"3994","2cd1cc61":"4046","2734a8cb":"4119",fa9ea33a:"4324","83ffcfc7":"4516","01cc436f":"4799",c0c56fde:"5429","5168c444":"5435",bfd7cda6:"5673","54b007f9":"5774","3aad01b6":"5885","789b9187":"6062",ede748b0:"6346",f3c2a85b:"7127","54c9b52d":"7200","5326ae13":"7281",c09f4ff7:"7370","31005c87":"7379","393be207":"7414","7ed59f5b":"7423","52b604af":"7498","672ba256":"7550",cea0f3cc:"7554","4165a353":"7565","1866ef2b":"7573","3af40de9":"7722","080faf05":"7883","30c86ab3":"8272","325f60ea":"8440","6a26a178":"8635","720811ff":"9037","1be78505":"9514","54ca51a6":"9550","1056a7f7":"9616","14eb3368":"9817"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(f,a)=>{var c=b.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var t=new Promise(((a,t)=>c=e[f]=[a,t]));a.push(c[2]=t);var d=b.p+b.u(f),r=new Error;b.l(d,(a=>{if(b.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var t=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;r.message="Loading chunk "+f+" failed.\n("+t+": "+d+")",r.name="ChunkLoadError",r.type=t,r.request=d,c[1](r)}}),"chunk-"+f,f)}},b.O.j=f=>0===e[f];var f=(f,a)=>{var c,t,d=a[0],r=a[1],o=a[2],n=0;if(d.some((f=>0!==e[f]))){for(c in r)b.o(r,c)&&(b.m[c]=r[c]);if(o)var i=o(b)}for(f&&f(a);n - + - + \ No newline at end of file diff --git a/tr/docs/category/developer-documentation/index.html b/tr/docs/category/developer-documentation/index.html index 635fb4f173b..ac8b1876557 100644 --- a/tr/docs/category/developer-documentation/index.html +++ b/tr/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/tr/docs/category/get-started-with-farming/index.html b/tr/docs/category/get-started-with-farming/index.html index 9b284c90251..ea8f74300b5 100644 --- a/tr/docs/category/get-started-with-farming/index.html +++ b/tr/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/tr/docs/category/operators-and-staking/index.html b/tr/docs/category/operators-and-staking/index.html index 134e13c51c0..fa9ad5a6ad7 100644 --- a/tr/docs/category/operators-and-staking/index.html +++ b/tr/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/tr/docs/category/wallets/index.html b/tr/docs/category/wallets/index.html index 20b4c0e84f8..36775c9c21d 100644 --- a/tr/docs/category/wallets/index.html +++ b/tr/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/tr/docs/community/CODE_OF_CONDUCT/index.html b/tr/docs/community/CODE_OF_CONDUCT/index.html index 4f720132af4..ca3c584fd21 100644 --- a/tr/docs/community/CODE_OF_CONDUCT/index.html +++ b/tr/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/tr/docs/community/contribute/index.html b/tr/docs/community/contribute/index.html index cb55b246350..4ac33091138 100644 --- a/tr/docs/community/contribute/index.html +++ b/tr/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/tr/docs/community/index.html b/tr/docs/community/index.html index 38fb28805ad..3fa99ab1a05 100644 --- a/tr/docs/community/index.html +++ b/tr/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/tr/docs/community/translate/index.html b/tr/docs/community/translate/index.html index 4c91a651353..0e13413078e 100644 --- a/tr/docs/community/translate/index.html +++ b/tr/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/tr/docs/developers/block_explorer/index.html b/tr/docs/developers/block_explorer/index.html index fbd71772028..8b9c837862b 100644 --- a/tr/docs/developers/block_explorer/index.html +++ b/tr/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/tr/docs/developers/faucet/index.html b/tr/docs/developers/faucet/index.html index 99429931c45..8fbf8d58194 100644 --- a/tr/docs/developers/faucet/index.html +++ b/tr/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/tr/docs/developers/foundry_guide/index.html b/tr/docs/developers/foundry_guide/index.html index c59d08a4427..b28a686db9f 100644 --- a/tr/docs/developers/foundry_guide/index.html +++ b/tr/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/tr/docs/developers/general-information/index.html b/tr/docs/developers/general-information/index.html index f3325926692..5933be81537 100644 --- a/tr/docs/developers/general-information/index.html +++ b/tr/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/tr/docs/developers/hardhat_guide/index.html b/tr/docs/developers/hardhat_guide/index.html index 2df04a88dec..e33ee5af58e 100644 --- a/tr/docs/developers/hardhat_guide/index.html +++ b/tr/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/tr/docs/developers/intro/index.html b/tr/docs/developers/intro/index.html index c80cb881f48..ad5decb0890 100644 --- a/tr/docs/developers/intro/index.html +++ b/tr/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/tr/docs/developers/local_development/index.html b/tr/docs/developers/local_development/index.html index b35c626d4e6..0a2e02c1e09 100644 --- a/tr/docs/developers/local_development/index.html +++ b/tr/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/tr/docs/developers/quick_start/index.html b/tr/docs/developers/quick_start/index.html index cb744307138..b08d48ef0ad 100644 --- a/tr/docs/developers/quick_start/index.html +++ b/tr/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/tr/docs/developers/remix_guide/index.html b/tr/docs/developers/remix_guide/index.html index cfd3479e22a..734346f0c47 100644 --- a/tr/docs/developers/remix_guide/index.html +++ b/tr/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/tr/docs/developers/setting-up-metamask/index.html b/tr/docs/developers/setting-up-metamask/index.html index e03fbf6b809..89ebf443e89 100644 --- a/tr/docs/developers/setting-up-metamask/index.html +++ b/tr/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/tr/docs/intro/index.html b/tr/docs/intro/index.html index 944dee5fa80..b0e0ea070ed 100644 --- a/tr/docs/intro/index.html +++ b/tr/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/tr/docs/operators_and_staking/intro/index.html b/tr/docs/operators_and_staking/intro/index.html index 707b461f619..8df266aa792 100644 --- a/tr/docs/operators_and_staking/intro/index.html +++ b/tr/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/tr/docs/operators_and_staking/operators/index.html b/tr/docs/operators_and_staking/operators/index.html index dc90adbdc4e..6d770e3a0fa 100644 --- a/tr/docs/operators_and_staking/operators/index.html +++ b/tr/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/tr/docs/operators_and_staking/staking/index.html b/tr/docs/operators_and_staking/staking/index.html index 956969d40c7..917ea1fc652 100644 --- a/tr/docs/operators_and_staking/staking/index.html +++ b/tr/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/tr/docs/pre-release/category/community/index.html b/tr/docs/pre-release/category/community/index.html index 54901d5a811..290d72b8752 100644 --- a/tr/docs/pre-release/category/community/index.html +++ b/tr/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/tr/docs/pre-release/category/developer-documentation/index.html b/tr/docs/pre-release/category/developer-documentation/index.html index f507688cc9c..6a1a4fc8c4a 100644 --- a/tr/docs/pre-release/category/developer-documentation/index.html +++ b/tr/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/tr/docs/pre-release/category/get-started-with-farming/index.html b/tr/docs/pre-release/category/get-started-with-farming/index.html index fa3561255a6..287875edd55 100644 --- a/tr/docs/pre-release/category/get-started-with-farming/index.html +++ b/tr/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/tr/docs/pre-release/category/operators-and-staking/index.html b/tr/docs/pre-release/category/operators-and-staking/index.html index 891cd0ee67c..9f76386bfab 100644 --- a/tr/docs/pre-release/category/operators-and-staking/index.html +++ b/tr/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/tr/docs/pre-release/category/wallets/index.html b/tr/docs/pre-release/category/wallets/index.html index 7936c97939d..a54d32181d9 100644 --- a/tr/docs/pre-release/category/wallets/index.html +++ b/tr/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/tr/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/tr/docs/pre-release/community/CODE_OF_CONDUCT/index.html index dd192bc3aa2..6409efc704e 100644 --- a/tr/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/tr/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/community/contribute/index.html b/tr/docs/pre-release/community/contribute/index.html index b67d4f6510b..c8c78f6a1c8 100644 --- a/tr/docs/pre-release/community/contribute/index.html +++ b/tr/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/community/index.html b/tr/docs/pre-release/community/index.html index 9c3690c50b1..183eaa123e6 100644 --- a/tr/docs/pre-release/community/index.html +++ b/tr/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/tr/docs/pre-release/community/translate/index.html b/tr/docs/pre-release/community/translate/index.html index 234e685578e..a084f6c0a3a 100644 --- a/tr/docs/pre-release/community/translate/index.html +++ b/tr/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/developers/block_explorer/index.html b/tr/docs/pre-release/developers/block_explorer/index.html index 581c8281ce3..58a5bbf37aa 100644 --- a/tr/docs/pre-release/developers/block_explorer/index.html +++ b/tr/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/developers/faucet/index.html b/tr/docs/pre-release/developers/faucet/index.html index 15430d5c1e2..2ad1fb3d8f8 100644 --- a/tr/docs/pre-release/developers/faucet/index.html +++ b/tr/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/developers/foundry_guide/index.html b/tr/docs/pre-release/developers/foundry_guide/index.html index 0f6d7b49b70..e6183fb35b1 100644 --- a/tr/docs/pre-release/developers/foundry_guide/index.html +++ b/tr/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/developers/general-information/index.html b/tr/docs/pre-release/developers/general-information/index.html index 2f6a9776d6e..0c729d8dc1d 100644 --- a/tr/docs/pre-release/developers/general-information/index.html +++ b/tr/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/developers/hardhat_guide/index.html b/tr/docs/pre-release/developers/hardhat_guide/index.html index d5ea44564b9..0ca64bb8d79 100644 --- a/tr/docs/pre-release/developers/hardhat_guide/index.html +++ b/tr/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/tr/docs/pre-release/developers/intro/index.html b/tr/docs/pre-release/developers/intro/index.html index 539954dcfd5..2d2bbab1f09 100644 --- a/tr/docs/pre-release/developers/intro/index.html +++ b/tr/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/developers/local_development/index.html b/tr/docs/pre-release/developers/local_development/index.html index e59ebae1960..2efae815759 100644 --- a/tr/docs/pre-release/developers/local_development/index.html +++ b/tr/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/developers/quick_start/index.html b/tr/docs/pre-release/developers/quick_start/index.html index 3e72ef73c35..bf094bbbb2f 100644 --- a/tr/docs/pre-release/developers/quick_start/index.html +++ b/tr/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/developers/remix_guide/index.html b/tr/docs/pre-release/developers/remix_guide/index.html index 9e18e59a05f..ca66f557d3d 100644 --- a/tr/docs/pre-release/developers/remix_guide/index.html +++ b/tr/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/developers/setting-up-metamask/index.html b/tr/docs/pre-release/developers/setting-up-metamask/index.html index b0b1eb064e0..6c111074790 100644 --- a/tr/docs/pre-release/developers/setting-up-metamask/index.html +++ b/tr/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/intro/index.html b/tr/docs/pre-release/intro/index.html index 05d7b6da634..801913997f6 100644 --- a/tr/docs/pre-release/intro/index.html +++ b/tr/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/operators_and_staking/intro/index.html b/tr/docs/pre-release/operators_and_staking/intro/index.html index 14ae312e085..5bc9ddc804f 100644 --- a/tr/docs/pre-release/operators_and_staking/intro/index.html +++ b/tr/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/operators_and_staking/operators/index.html b/tr/docs/pre-release/operators_and_staking/operators/index.html index 1a5ac0cb7ec..bded00db95f 100644 --- a/tr/docs/pre-release/operators_and_staking/operators/index.html +++ b/tr/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/operators_and_staking/staking/index.html b/tr/docs/pre-release/operators_and_staking/staking/index.html index ee45383a68b..f2c6dd17d71 100644 --- a/tr/docs/pre-release/operators_and_staking/staking/index.html +++ b/tr/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/tr/docs/pre-release/protocol/common_problems/index.html b/tr/docs/pre-release/protocol/common_problems/index.html index 59bccb10271..3c13352d2b5 100644 --- a/tr/docs/pre-release/protocol/common_problems/index.html +++ b/tr/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/protocol/port-forwarding/index.html b/tr/docs/pre-release/protocol/port-forwarding/index.html index 927fab91153..e4964b20269 100644 --- a/tr/docs/pre-release/protocol/port-forwarding/index.html +++ b/tr/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/tr/docs/pre-release/protocol/pulsar/index.html b/tr/docs/pre-release/protocol/pulsar/index.html index 65e2ce52089..d234e9f410c 100644 --- a/tr/docs/pre-release/protocol/pulsar/index.html +++ b/tr/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    danger

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/protocol/security/index.html b/tr/docs/pre-release/protocol/security/index.html index 20297720ab6..5577ef6cf75 100644 --- a/tr/docs/pre-release/protocol/security/index.html +++ b/tr/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/protocol/substrate-cli/index.html b/tr/docs/pre-release/protocol/substrate-cli/index.html index d598b461772..79727fd79ea 100644 --- a/tr/docs/pre-release/protocol/substrate-cli/index.html +++ b/tr/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/protocol/timekeeping/index.html b/tr/docs/pre-release/protocol/timekeeping/index.html index e5fa2c7dbff..7b4ee9ccef7 100644 --- a/tr/docs/pre-release/protocol/timekeeping/index.html +++ b/tr/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/tr/docs/pre-release/protocol/wallets/polkadot/index.html b/tr/docs/pre-release/protocol/wallets/polkadot/index.html index 3274c7e492c..e6b380867b0 100644 --- a/tr/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/tr/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/tr/docs/pre-release/protocol/wallets/subwallet/index.html b/tr/docs/pre-release/protocol/wallets/subwallet/index.html index 830ae678556..e8fc4fafd80 100644 --- a/tr/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/tr/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/tr/docs/protocol/common_problems/index.html b/tr/docs/protocol/common_problems/index.html index 3e60cf48ba4..7eaa5f9472c 100644 --- a/tr/docs/protocol/common_problems/index.html +++ b/tr/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/tr/docs/protocol/port-forwarding/index.html b/tr/docs/protocol/port-forwarding/index.html index 024f9be52bd..9cf56554fe9 100644 --- a/tr/docs/protocol/port-forwarding/index.html +++ b/tr/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/tr/docs/protocol/pulsar/index.html b/tr/docs/protocol/pulsar/index.html index 72e3055eda2..140bf199cce 100644 --- a/tr/docs/protocol/pulsar/index.html +++ b/tr/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/tr/docs/protocol/security/index.html b/tr/docs/protocol/security/index.html index a79e6654326..818aaab7375 100644 --- a/tr/docs/protocol/security/index.html +++ b/tr/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/tr/docs/protocol/substrate-cli/index.html b/tr/docs/protocol/substrate-cli/index.html index 46a003af40a..96e2c43e801 100644 --- a/tr/docs/protocol/substrate-cli/index.html +++ b/tr/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/tr/docs/protocol/timekeeping/index.html b/tr/docs/protocol/timekeeping/index.html index d1d3106b0ae..0652975a6f5 100644 --- a/tr/docs/protocol/timekeeping/index.html +++ b/tr/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/tr/docs/protocol/wallets/polkadot/index.html b/tr/docs/protocol/wallets/polkadot/index.html index 09a4288042e..97821a90cc5 100644 --- a/tr/docs/protocol/wallets/polkadot/index.html +++ b/tr/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/tr/docs/protocol/wallets/subwallet/index.html b/tr/docs/protocol/wallets/subwallet/index.html index 2891e014849..08606ac2a34 100644 --- a/tr/docs/protocol/wallets/subwallet/index.html +++ b/tr/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/tr/index.html b/tr/index.html index f9abf695279..d572f6e551c 100644 --- a/tr/index.html +++ b/tr/index.html @@ -7,13 +7,13 @@ - +

    Her Yerden Çiftlik

    Yedek disk taahhüt ederek bir çiftçi düğümü çalıştırarak ödüller kazanın. Pahalı bir kurulum veya peşin sermaye gerekli değildir.

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/tr/markdown-page/index.html b/tr/markdown-page/index.html index 5853b20c6b5..1775e00ae0b 100644 --- a/tr/markdown-page/index.html +++ b/tr/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/uk/404.html b/uk/404.html index 7bb6127ef63..15121f86c28 100644 --- a/uk/404.html +++ b/uk/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/uk/assets/js/6ce1c907.b99919b7.js b/uk/assets/js/6ce1c907.a26f27a4.js similarity index 63% rename from uk/assets/js/6ce1c907.b99919b7.js rename to uk/assets/js/6ce1c907.a26f27a4.js index ecb972dcf9a..ec908ed5446 100644 --- a/uk/assets/js/6ce1c907.b99919b7.js +++ b/uk/assets/js/6ce1c907.a26f27a4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[2318],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/uk/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/uk/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/uk/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/uk/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/uk/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[2318],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(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=l(e,["components","mdxType","originalType","parentName"]),c=p(r),m=o,h=c["".concat(s,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},u),{},{components:r})):n.createElement(h,i({ref:t},u))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/uk/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/uk/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/uk/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/uk/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],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:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/uk/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/uk/assets/js/runtime~main.8f004557.js b/uk/assets/js/runtime~main.20d15237.js similarity index 98% rename from uk/assets/js/runtime~main.8f004557.js rename to uk/assets/js/runtime~main.20d15237.js index fb15b57b58c..c2a5d2558a1 100644 --- a/uk/assets/js/runtime~main.8f004557.js +++ b/uk/assets/js/runtime~main.20d15237.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({1:"75f76adc",9:"98ded9cb",53:"935f2afb",269:"4497bd3b",817:"616f8ff8",893:"b86d0145",1418:"f790f77f",1450:"65bdfbd8",1466:"68f10761",1480:"7e11ffd4",1505:"ea7e0ab9",1671:"e7d18e1e",1813:"ef07ecc8",1897:"50c0e715",2239:"a1e3d9aa",2307:"40b78d1b",2313:"42b5b7fb",2318:"6ce1c907",2401:"cc80a425",2419:"32343b3d",2457:"66a275ff",2482:"5ec5a56f",2524:"4e145ca5",2838:"afa69065",2973:"76f97b04",3085:"1f391b9e",3104:"2da4f8c4",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3771:"a422ddea",3867:"c6eace14",3940:"7c7c98e7",4244:"30f2cf0a",5181:"57a90d6c",5259:"342cdd33",5302:"2c32a1a4",5310:"d16330e5",5424:"b78024a5",5514:"a0bac695",5651:"797fa177",5739:"6093477c",5910:"f4965c6b",5936:"aa38d351",6094:"9d7adc34",6159:"2a1637b6",6468:"e024862c",6587:"40fbd61b",6592:"166e3606",6676:"692339be",6681:"77cb67c2",6747:"19b58eec",6973:"3f5df296",7093:"b967692f",7269:"ffb161d1",7331:"258c4bec",7370:"c09f4ff7",7414:"393be207",7846:"0c6406cc",7889:"f0fa826a",7918:"17896441",7945:"204cc97e",8405:"c9d29618",8679:"40854b1a",8847:"05bde6cd",8963:"d48b944c",9097:"34a0a48c",9274:"c3d46a6f",9514:"1be78505",9635:"b43b5f57",9798:"4d561f1f",9817:"14eb3368"}[e]||e)+"."+{1:"82156a5e",9:"a6b72ad6",53:"e5f10859",269:"d2892f4b",814:"dc8c3a26",817:"9ac0693d",893:"9cd5aa60",1418:"c4d67b89",1450:"856afdc2",1466:"f09dc0fe",1480:"13498f96",1505:"8e918fa0",1671:"acb48bde",1813:"04cea51f",1897:"d5473ef2",2239:"4800822d",2307:"9e8029f5",2313:"ac792789",2318:"b99919b7",2401:"b0ec9201",2419:"a9261247",2457:"ab32a9cb",2482:"53046de9",2524:"5dc006b3",2838:"4407d8e5",2973:"7275965d",3085:"3a447380",3104:"ea568c0c",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3771:"51d88caf",3867:"4f0cecc7",3940:"d488853a",4244:"ec610627",4972:"4a54fd4a",5181:"160fa6fb",5259:"bb51f4cd",5302:"34652e22",5310:"55275e56",5424:"2ac6bef5",5514:"1113cd39",5651:"4e73c1d3",5739:"37f13386",5910:"53ea60e5",5936:"cd2db630",6094:"caf936e2",6159:"4b6e96fc",6468:"e3013d23",6587:"8fbc9c3b",6592:"695800fb",6676:"3006d0ba",6681:"4e1882af",6747:"51cf2fa7",6973:"7ccf7854",7093:"b294af88",7269:"9b0cc1b2",7331:"927851e5",7370:"06234766",7414:"67226c8f",7846:"b1881433",7889:"f48ec2f7",7918:"e3da5265",7945:"627c735c",8405:"0d2e4830",8679:"96e581ad",8847:"bdae947d",8963:"0c374b7e",9097:"b93cf2dc",9274:"596bd6a7",9514:"478c02c6",9635:"cd31bad9",9798:"0388eaef",9817:"b7ea7ab7"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/uk/",r.gca=function(e){return e={17896441:"7918","75f76adc":"1","98ded9cb":"9","935f2afb":"53","4497bd3b":"269","616f8ff8":"817",b86d0145:"893",f790f77f:"1418","65bdfbd8":"1450","68f10761":"1466","7e11ffd4":"1480",ea7e0ab9:"1505",e7d18e1e:"1671",ef07ecc8:"1813","50c0e715":"1897",a1e3d9aa:"2239","40b78d1b":"2307","42b5b7fb":"2313","6ce1c907":"2318",cc80a425:"2401","32343b3d":"2419","66a275ff":"2457","5ec5a56f":"2482","4e145ca5":"2524",afa69065:"2838","76f97b04":"2973","1f391b9e":"3085","2da4f8c4":"3104",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280",a422ddea:"3771",c6eace14:"3867","7c7c98e7":"3940","30f2cf0a":"4244","57a90d6c":"5181","342cdd33":"5259","2c32a1a4":"5302",d16330e5:"5310",b78024a5:"5424",a0bac695:"5514","797fa177":"5651","6093477c":"5739",f4965c6b:"5910",aa38d351:"5936","9d7adc34":"6094","2a1637b6":"6159",e024862c:"6468","40fbd61b":"6587","166e3606":"6592","692339be":"6676","77cb67c2":"6681","19b58eec":"6747","3f5df296":"6973",b967692f:"7093",ffb161d1:"7269","258c4bec":"7331",c09f4ff7:"7370","393be207":"7414","0c6406cc":"7846",f0fa826a:"7889","204cc97e":"7945",c9d29618:"8405","40854b1a":"8679","05bde6cd":"8847",d48b944c:"8963","34a0a48c":"9097",c3d46a6f:"9274","1be78505":"9514",b43b5f57:"9635","4d561f1f":"9798","14eb3368":"9817"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({1:"75f76adc",9:"98ded9cb",53:"935f2afb",269:"4497bd3b",817:"616f8ff8",893:"b86d0145",1418:"f790f77f",1450:"65bdfbd8",1466:"68f10761",1480:"7e11ffd4",1505:"ea7e0ab9",1671:"e7d18e1e",1813:"ef07ecc8",1897:"50c0e715",2239:"a1e3d9aa",2307:"40b78d1b",2313:"42b5b7fb",2318:"6ce1c907",2401:"cc80a425",2419:"32343b3d",2457:"66a275ff",2482:"5ec5a56f",2524:"4e145ca5",2838:"afa69065",2973:"76f97b04",3085:"1f391b9e",3104:"2da4f8c4",3235:"da6f36cd",3237:"1df93b7f",3280:"ef42b41f",3771:"a422ddea",3867:"c6eace14",3940:"7c7c98e7",4244:"30f2cf0a",5181:"57a90d6c",5259:"342cdd33",5302:"2c32a1a4",5310:"d16330e5",5424:"b78024a5",5514:"a0bac695",5651:"797fa177",5739:"6093477c",5910:"f4965c6b",5936:"aa38d351",6094:"9d7adc34",6159:"2a1637b6",6468:"e024862c",6587:"40fbd61b",6592:"166e3606",6676:"692339be",6681:"77cb67c2",6747:"19b58eec",6973:"3f5df296",7093:"b967692f",7269:"ffb161d1",7331:"258c4bec",7370:"c09f4ff7",7414:"393be207",7846:"0c6406cc",7889:"f0fa826a",7918:"17896441",7945:"204cc97e",8405:"c9d29618",8679:"40854b1a",8847:"05bde6cd",8963:"d48b944c",9097:"34a0a48c",9274:"c3d46a6f",9514:"1be78505",9635:"b43b5f57",9798:"4d561f1f",9817:"14eb3368"}[e]||e)+"."+{1:"82156a5e",9:"a6b72ad6",53:"e5f10859",269:"d2892f4b",814:"dc8c3a26",817:"9ac0693d",893:"9cd5aa60",1418:"c4d67b89",1450:"856afdc2",1466:"f09dc0fe",1480:"13498f96",1505:"8e918fa0",1671:"acb48bde",1813:"04cea51f",1897:"d5473ef2",2239:"4800822d",2307:"9e8029f5",2313:"ac792789",2318:"a26f27a4",2401:"b0ec9201",2419:"a9261247",2457:"ab32a9cb",2482:"53046de9",2524:"5dc006b3",2838:"4407d8e5",2973:"7275965d",3085:"3a447380",3104:"ea568c0c",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3280:"a28d7ef7",3473:"fdffa07c",3771:"51d88caf",3867:"4f0cecc7",3940:"d488853a",4244:"ec610627",4972:"4a54fd4a",5181:"160fa6fb",5259:"bb51f4cd",5302:"34652e22",5310:"55275e56",5424:"2ac6bef5",5514:"1113cd39",5651:"4e73c1d3",5739:"37f13386",5910:"53ea60e5",5936:"cd2db630",6094:"caf936e2",6159:"4b6e96fc",6468:"e3013d23",6587:"8fbc9c3b",6592:"695800fb",6676:"3006d0ba",6681:"4e1882af",6747:"51cf2fa7",6973:"7ccf7854",7093:"b294af88",7269:"9b0cc1b2",7331:"927851e5",7370:"06234766",7414:"67226c8f",7846:"b1881433",7889:"f48ec2f7",7918:"e3da5265",7945:"627c735c",8405:"0d2e4830",8679:"96e581ad",8847:"bdae947d",8963:"0c374b7e",9097:"b93cf2dc",9274:"596bd6a7",9514:"478c02c6",9635:"cd31bad9",9798:"0388eaef",9817:"b7ea7ab7"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="portal:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/uk/",r.gca=function(e){return e={17896441:"7918","75f76adc":"1","98ded9cb":"9","935f2afb":"53","4497bd3b":"269","616f8ff8":"817",b86d0145:"893",f790f77f:"1418","65bdfbd8":"1450","68f10761":"1466","7e11ffd4":"1480",ea7e0ab9:"1505",e7d18e1e:"1671",ef07ecc8:"1813","50c0e715":"1897",a1e3d9aa:"2239","40b78d1b":"2307","42b5b7fb":"2313","6ce1c907":"2318",cc80a425:"2401","32343b3d":"2419","66a275ff":"2457","5ec5a56f":"2482","4e145ca5":"2524",afa69065:"2838","76f97b04":"2973","1f391b9e":"3085","2da4f8c4":"3104",da6f36cd:"3235","1df93b7f":"3237",ef42b41f:"3280",a422ddea:"3771",c6eace14:"3867","7c7c98e7":"3940","30f2cf0a":"4244","57a90d6c":"5181","342cdd33":"5259","2c32a1a4":"5302",d16330e5:"5310",b78024a5:"5424",a0bac695:"5514","797fa177":"5651","6093477c":"5739",f4965c6b:"5910",aa38d351:"5936","9d7adc34":"6094","2a1637b6":"6159",e024862c:"6468","40fbd61b":"6587","166e3606":"6592","692339be":"6676","77cb67c2":"6681","19b58eec":"6747","3f5df296":"6973",b967692f:"7093",ffb161d1:"7269","258c4bec":"7331",c09f4ff7:"7370","393be207":"7414","0c6406cc":"7846",f0fa826a:"7889","204cc97e":"7945",c9d29618:"8405","40854b1a":"8679","05bde6cd":"8847",d48b944c:"8963","34a0a48c":"9097",c3d46a6f:"9274","1be78505":"9514",b43b5f57:"9635","4d561f1f":"9798","14eb3368":"9817"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n - + - + \ No newline at end of file diff --git a/uk/docs/category/developer-documentation/index.html b/uk/docs/category/developer-documentation/index.html index 507911d2420..59a8dcb87c0 100644 --- a/uk/docs/category/developer-documentation/index.html +++ b/uk/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/uk/docs/category/get-started-with-farming/index.html b/uk/docs/category/get-started-with-farming/index.html index 728f064db69..6ef440393db 100644 --- a/uk/docs/category/get-started-with-farming/index.html +++ b/uk/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/uk/docs/category/operators-and-staking/index.html b/uk/docs/category/operators-and-staking/index.html index 4fba041009a..ea3fbf2b6e7 100644 --- a/uk/docs/category/operators-and-staking/index.html +++ b/uk/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/uk/docs/category/wallets/index.html b/uk/docs/category/wallets/index.html index f49380bf92d..1e505c13fc3 100644 --- a/uk/docs/category/wallets/index.html +++ b/uk/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/uk/docs/community/CODE_OF_CONDUCT/index.html b/uk/docs/community/CODE_OF_CONDUCT/index.html index 38574410f70..04064e86276 100644 --- a/uk/docs/community/CODE_OF_CONDUCT/index.html +++ b/uk/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/uk/docs/community/contribute/index.html b/uk/docs/community/contribute/index.html index aa26623d1e0..57fdfbbcca7 100644 --- a/uk/docs/community/contribute/index.html +++ b/uk/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/uk/docs/community/index.html b/uk/docs/community/index.html index cf23f2f9a80..b51818589eb 100644 --- a/uk/docs/community/index.html +++ b/uk/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/uk/docs/community/translate/index.html b/uk/docs/community/translate/index.html index 808445075a6..81eb5422e66 100644 --- a/uk/docs/community/translate/index.html +++ b/uk/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/uk/docs/developers/block_explorer/index.html b/uk/docs/developers/block_explorer/index.html index 500d8eb9f83..cea7400a310 100644 --- a/uk/docs/developers/block_explorer/index.html +++ b/uk/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/uk/docs/developers/faucet/index.html b/uk/docs/developers/faucet/index.html index f349752138d..1149379327b 100644 --- a/uk/docs/developers/faucet/index.html +++ b/uk/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/uk/docs/developers/foundry_guide/index.html b/uk/docs/developers/foundry_guide/index.html index 3b390f91a1d..53ab681410d 100644 --- a/uk/docs/developers/foundry_guide/index.html +++ b/uk/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/uk/docs/developers/general-information/index.html b/uk/docs/developers/general-information/index.html index 47357aa8e3a..1ef16845ce8 100644 --- a/uk/docs/developers/general-information/index.html +++ b/uk/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/uk/docs/developers/hardhat_guide/index.html b/uk/docs/developers/hardhat_guide/index.html index 91a5869e864..248ffcefe2f 100644 --- a/uk/docs/developers/hardhat_guide/index.html +++ b/uk/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/uk/docs/developers/intro/index.html b/uk/docs/developers/intro/index.html index 8e3bfa493e7..18a43abe39d 100644 --- a/uk/docs/developers/intro/index.html +++ b/uk/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/uk/docs/developers/local_development/index.html b/uk/docs/developers/local_development/index.html index 50ad3e9b628..99f713e41aa 100644 --- a/uk/docs/developers/local_development/index.html +++ b/uk/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/uk/docs/developers/quick_start/index.html b/uk/docs/developers/quick_start/index.html index e4f6316bc88..4a9e880605a 100644 --- a/uk/docs/developers/quick_start/index.html +++ b/uk/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/uk/docs/developers/remix_guide/index.html b/uk/docs/developers/remix_guide/index.html index 85a3dbeaab8..2d20af4d4bc 100644 --- a/uk/docs/developers/remix_guide/index.html +++ b/uk/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/uk/docs/developers/setting-up-metamask/index.html b/uk/docs/developers/setting-up-metamask/index.html index c65a4cf0859..9d6c40d5c16 100644 --- a/uk/docs/developers/setting-up-metamask/index.html +++ b/uk/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/uk/docs/intro/index.html b/uk/docs/intro/index.html index 72c31c9923a..f3775b222f6 100644 --- a/uk/docs/intro/index.html +++ b/uk/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/uk/docs/operators_and_staking/intro/index.html b/uk/docs/operators_and_staking/intro/index.html index 4bc66f398f6..fb2e9510087 100644 --- a/uk/docs/operators_and_staking/intro/index.html +++ b/uk/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/uk/docs/operators_and_staking/operators/index.html b/uk/docs/operators_and_staking/operators/index.html index a4d413d9df4..a125b43fa98 100644 --- a/uk/docs/operators_and_staking/operators/index.html +++ b/uk/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/uk/docs/operators_and_staking/staking/index.html b/uk/docs/operators_and_staking/staking/index.html index 052e175ce0e..84fef428213 100644 --- a/uk/docs/operators_and_staking/staking/index.html +++ b/uk/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/uk/docs/pre-release/category/community/index.html b/uk/docs/pre-release/category/community/index.html index a0dda9a89a8..8cf923bd08b 100644 --- a/uk/docs/pre-release/category/community/index.html +++ b/uk/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/uk/docs/pre-release/category/developer-documentation/index.html b/uk/docs/pre-release/category/developer-documentation/index.html index 100554609e5..af9b9946e4d 100644 --- a/uk/docs/pre-release/category/developer-documentation/index.html +++ b/uk/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/uk/docs/pre-release/category/get-started-with-farming/index.html b/uk/docs/pre-release/category/get-started-with-farming/index.html index 6e514e842f6..29abf9b9067 100644 --- a/uk/docs/pre-release/category/get-started-with-farming/index.html +++ b/uk/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/uk/docs/pre-release/category/operators-and-staking/index.html b/uk/docs/pre-release/category/operators-and-staking/index.html index 0237c8805e7..75529c752dc 100644 --- a/uk/docs/pre-release/category/operators-and-staking/index.html +++ b/uk/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/uk/docs/pre-release/category/wallets/index.html b/uk/docs/pre-release/category/wallets/index.html index 246ce6cb469..bf4f864361b 100644 --- a/uk/docs/pre-release/category/wallets/index.html +++ b/uk/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/uk/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/uk/docs/pre-release/community/CODE_OF_CONDUCT/index.html index 53039f7ea6f..56bfb1bdb59 100644 --- a/uk/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/uk/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/community/contribute/index.html b/uk/docs/pre-release/community/contribute/index.html index 66d1802f98f..ab90abb1ae5 100644 --- a/uk/docs/pre-release/community/contribute/index.html +++ b/uk/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • Try and think about your code from a 3rd person view, it should make sense to anyone with a similar background in the technology that you are using.
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. Create your own fork of the code. Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    Community

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/community/index.html b/uk/docs/pre-release/community/index.html index 8f52669385b..c0cbbbd23c6 100644 --- a/uk/docs/pre-release/community/index.html +++ b/uk/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    Bringing the PoC Consensus to Substrate

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/uk/docs/pre-release/community/translate/index.html b/uk/docs/pre-release/community/translate/index.html index 449afd1b436..504072ccd25 100644 --- a/uk/docs/pre-release/community/translate/index.html +++ b/uk/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. Spot to input language translation of english text
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/developers/block_explorer/index.html b/uk/docs/pre-release/developers/block_explorer/index.html index a5a531a56dc..0903f9f99f3 100644 --- a/uk/docs/pre-release/developers/block_explorer/index.html +++ b/uk/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/developers/faucet/index.html b/uk/docs/pre-release/developers/faucet/index.html index a7c5764b617..58a6e16a230 100644 --- a/uk/docs/pre-release/developers/faucet/index.html +++ b/uk/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/developers/foundry_guide/index.html b/uk/docs/pre-release/developers/foundry_guide/index.html index 88fe59c85eb..42aedf1e085 100644 --- a/uk/docs/pre-release/developers/foundry_guide/index.html +++ b/uk/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/developers/general-information/index.html b/uk/docs/pre-release/developers/general-information/index.html index 3741c839e28..dd3c00d436d 100644 --- a/uk/docs/pre-release/developers/general-information/index.html +++ b/uk/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/developers/hardhat_guide/index.html b/uk/docs/pre-release/developers/hardhat_guide/index.html index 4c230a85520..9c2ced39c96 100644 --- a/uk/docs/pre-release/developers/hardhat_guide/index.html +++ b/uk/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/uk/docs/pre-release/developers/intro/index.html b/uk/docs/pre-release/developers/intro/index.html index a2f70ee6e5a..d6e6e663adb 100644 --- a/uk/docs/pre-release/developers/intro/index.html +++ b/uk/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/developers/local_development/index.html b/uk/docs/pre-release/developers/local_development/index.html index 7c8db8db489..a3ef1df5a22 100644 --- a/uk/docs/pre-release/developers/local_development/index.html +++ b/uk/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/developers/quick_start/index.html b/uk/docs/pre-release/developers/quick_start/index.html index 55280683e69..d0e2101be81 100644 --- a/uk/docs/pre-release/developers/quick_start/index.html +++ b/uk/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/developers/remix_guide/index.html b/uk/docs/pre-release/developers/remix_guide/index.html index 1af60d38ab1..1a55a9a146b 100644 --- a/uk/docs/pre-release/developers/remix_guide/index.html +++ b/uk/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/developers/setting-up-metamask/index.html b/uk/docs/pre-release/developers/setting-up-metamask/index.html index 270df6b5028..0078af2c916 100644 --- a/uk/docs/pre-release/developers/setting-up-metamask/index.html +++ b/uk/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/intro/index.html b/uk/docs/pre-release/intro/index.html index e8f52445f7e..039991257cb 100644 --- a/uk/docs/pre-release/intro/index.html +++ b/uk/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/operators_and_staking/intro/index.html b/uk/docs/pre-release/operators_and_staking/intro/index.html index 8461350092c..65bde1ca3d5 100644 --- a/uk/docs/pre-release/operators_and_staking/intro/index.html +++ b/uk/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/operators_and_staking/operators/index.html b/uk/docs/pre-release/operators_and_staking/operators/index.html index bad9f12975a..df450016488 100644 --- a/uk/docs/pre-release/operators_and_staking/operators/index.html +++ b/uk/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/operators_and_staking/staking/index.html b/uk/docs/pre-release/operators_and_staking/staking/index.html index 0583870a728..8fec054a1af 100644 --- a/uk/docs/pre-release/operators_and_staking/staking/index.html +++ b/uk/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/uk/docs/pre-release/protocol/common_problems/index.html b/uk/docs/pre-release/protocol/common_problems/index.html index e5b71b62149..5f506a7a90a 100644 --- a/uk/docs/pre-release/protocol/common_problems/index.html +++ b/uk/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/protocol/port-forwarding/index.html b/uk/docs/pre-release/protocol/port-forwarding/index.html index 64405c2fa6c..d713c308995 100644 --- a/uk/docs/pre-release/protocol/port-forwarding/index.html +++ b/uk/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/uk/docs/pre-release/protocol/pulsar/index.html b/uk/docs/pre-release/protocol/pulsar/index.html index 9c30dbe2d8f..74627f972bd 100644 --- a/uk/docs/pre-release/protocol/pulsar/index.html +++ b/uk/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/protocol/security/index.html b/uk/docs/pre-release/protocol/security/index.html index 46b871c1a36..287a557f246 100644 --- a/uk/docs/pre-release/protocol/security/index.html +++ b/uk/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/protocol/substrate-cli/index.html b/uk/docs/pre-release/protocol/substrate-cli/index.html index b5d20415499..90c08f3c36f 100644 --- a/uk/docs/pre-release/protocol/substrate-cli/index.html +++ b/uk/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/protocol/timekeeping/index.html b/uk/docs/pre-release/protocol/timekeeping/index.html index f0eeabb53be..69221a45241 100644 --- a/uk/docs/pre-release/protocol/timekeeping/index.html +++ b/uk/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/uk/docs/pre-release/protocol/wallets/polkadot/index.html b/uk/docs/pre-release/protocol/wallets/polkadot/index.html index 374c12777ac..a1679fe4d9d 100644 --- a/uk/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/uk/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/uk/docs/pre-release/protocol/wallets/subwallet/index.html b/uk/docs/pre-release/protocol/wallets/subwallet/index.html index 68bdec31258..805d04f1618 100644 --- a/uk/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/uk/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/uk/docs/protocol/common_problems/index.html b/uk/docs/protocol/common_problems/index.html index 1b7948dfeaf..a79f15debe7 100644 --- a/uk/docs/protocol/common_problems/index.html +++ b/uk/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/uk/docs/protocol/port-forwarding/index.html b/uk/docs/protocol/port-forwarding/index.html index a29cad5c94f..31f68b20114 100644 --- a/uk/docs/protocol/port-forwarding/index.html +++ b/uk/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. This will display the IP Address of your home router at the top
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. Some ISP's have it configured to your ISP Portal account login information.

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/uk/docs/protocol/pulsar/index.html b/uk/docs/protocol/pulsar/index.html index e357529852c..58c43dc859e 100644 --- a/uk/docs/protocol/pulsar/index.html +++ b/uk/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/uk/docs/protocol/security/index.html b/uk/docs/protocol/security/index.html index 82ed3d35d21..77682daf053 100644 --- a/uk/docs/protocol/security/index.html +++ b/uk/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/uk/docs/protocol/substrate-cli/index.html b/uk/docs/protocol/substrate-cli/index.html index 2c1ba1c687b..b4763cac3a6 100644 --- a/uk/docs/protocol/substrate-cli/index.html +++ b/uk/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/uk/docs/protocol/timekeeping/index.html b/uk/docs/protocol/timekeeping/index.html index 453b312554c..b8570e140a9 100644 --- a/uk/docs/protocol/timekeeping/index.html +++ b/uk/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/uk/docs/protocol/wallets/polkadot/index.html b/uk/docs/protocol/wallets/polkadot/index.html index 5f34c8f408a..9d0ceb6b98e 100644 --- a/uk/docs/protocol/wallets/polkadot/index.html +++ b/uk/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. Visit the Polkadot.js Website and Download your respective version.

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. then click “Add the account with the generated seed”

      step-5

    3. Congratulations you have created a polkadot.js wallet!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/uk/docs/protocol/wallets/subwallet/index.html b/uk/docs/protocol/wallets/subwallet/index.html index ac2a47c21dd..ffe6dbbf1a3 100644 --- a/uk/docs/protocol/wallets/subwallet/index.html +++ b/uk/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. When you create a new account you will see the following.

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. Check which accounts you would like to import, and check I have saved my mnemonic seed safely and click Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, select which account you want to connect and click Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/uk/index.html b/uk/index.html index 576df220223..348abc7c193 100644 --- a/uk/index.html +++ b/uk/index.html @@ -7,13 +7,13 @@ - +

    Ферма звідусіль

    Заробляйте винагороди, запускаючи вузол фермера, даючи обіцянку вільного диска. Не потрібно дорогого налаштування або авансового капіталу.

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/uk/markdown-page/index.html b/uk/markdown-page/index.html index 29c17efb169..1c185c86fa4 100644 --- a/uk/markdown-page/index.html +++ b/uk/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/zh/404.html b/zh/404.html index de3b2f3d6ce..8f1487c5d82 100644 --- a/zh/404.html +++ b/zh/404.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/zh/assets/js/62315191.15026598.js b/zh/assets/js/62315191.fca8066f.js similarity index 73% rename from zh/assets/js/62315191.15026598.js rename to zh/assets/js/62315191.fca8066f.js index bc5d93a9709..6f6b8107de2 100644 --- a/zh/assets/js/62315191.15026598.js +++ b/zh/assets/js/62315191.fca8066f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[5238],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/zh/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/zh/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/zh/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/zh/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/zh/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[5238],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(h,i(i({ref:t},c),{},{components:r})):n.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},i="\ud83d\udc4bWelcome",l={unversionedId:"intro",id:"version-latest/intro",title:"Getting Started",description:"A Getting Started guide for the Subspace Network",source:"@site/i18n/zh/docusaurus-plugin-content-docs/version-latest/intro.md",sourceDirName:".",slug:"/intro",permalink:"/zh/docs/intro",draft:!1,editUrl:"https://github.com/subspace/subspace-docs/blob/main/i18n/zh/docusaurus-plugin-content-docs/current/intro.md",tags:[],version:"latest",sidebarPosition:1,frontMatter:{title:"Getting Started",sidebar_position:1,description:"A Getting Started guide for the Subspace Network",keywords:["Getting Started","Learn","Farming","Development"]},sidebar:"tutorialSidebar",next:{title:"Get Started with Farming",permalink:"/zh/docs/category/get-started-with-farming"}},s={},p=[{value:"\u2753 Learn About the Subspace Network",id:"-learn-about-the-subspace-network",level:2},{value:"\ud83e\udd1d Participate on the Network",id:"-participate-on-the-network",level:2},{value:"- Start Farming with Pulsar",id:"--start-farming-with-pulsar",level:3},{value:"\ud83d\udcd6 Develop on Subspace Network",id:"-develop-on-subspace-network",level:2},{value:"- Core Protocol Development",id:"--core-protocol-development",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"welcome"},"\ud83d\udc4bWelcome"),(0,o.kt)("p",null,"The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems."),(0,o.kt)("h2",{id:"-learn-about-the-subspace-network"},"\u2753 Learn About the Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/technology"},"What is the Subspace Network")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/faq"},"Frequently Asked Questions")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://forum.subspace.network/"},"Subspace Forum - Knowledge-Sharing Platform")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://subspace.network/news/subspace-network-whitepaper"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Summarized"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://assets.website-files.com/61526a2af87a54e565b0ae92/617759c00edd0e3bd279aa29_Subspace_%20A%20solution%20to%20the%20farmer%27s%20dilemma.pdf"},"Whitepaper - ",(0,o.kt)("em",{parentName:"a"},"Full Length")))),(0,o.kt)("h2",{id:"-participate-on-the-network"},"\ud83e\udd1d Participate on the Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below."),(0,o.kt)("h3",{id:"--start-farming-with-pulsar"},"- ",(0,o.kt)("a",{parentName:"h3",href:"/zh/docs/protocol/pulsar"},"Start Farming with Pulsar")),(0,o.kt)("h2",{id:"-develop-on-subspace-network"},"\ud83d\udcd6 Develop on Subspace Network"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network."),(0,o.kt)("h3",{id:"--core-protocol-development"},"- ",(0,o.kt)("a",{parentName:"h3",href:"https://github.com/subspace/subspace/blob/main/docs/development.md"},"Core Protocol Development")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/zh/assets/js/runtime~main.1235d3f0.js b/zh/assets/js/runtime~main.7106239b.js similarity index 99% rename from zh/assets/js/runtime~main.1235d3f0.js rename to zh/assets/js/runtime~main.7106239b.js index 74e1c1800df..abf7f14a3f0 100644 --- a/zh/assets/js/runtime~main.1235d3f0.js +++ b/zh/assets/js/runtime~main.7106239b.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,d,f,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={exports:{}};return b[e].call(d.exports,d,d.exports,r),d.exports}r.m=b,e=[],r.O=(a,d,f,c)=>{if(!d){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[d,f,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,d)=>(r.f[d](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"0d4ae5d9",71:"b08ed549",140:"dd4d0112",543:"ca896cd4",583:"e54d466b",774:"6caaddab",1069:"4d500d83",1391:"b9b1b603",1713:"c292a396",1806:"5327ec85",1819:"120be503",2197:"935f2afb",2326:"5e72650a",2513:"da8f2393",2555:"c62f8b17",2592:"d6e72e2c",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3241:"99e8bde7",3254:"8a16f931",3280:"ef42b41f",3529:"30e5c515",3624:"44244e26",3647:"8e69991e",3702:"753c4304",3775:"6915a23a",3821:"ab57e062",4004:"d62f5d15",4009:"9f5dd207",4086:"c8a39eeb",4286:"70c47322",4616:"75dba5f8",4717:"26706ab6",4772:"14eba5d5",4870:"f2d6c892",5e3:"0e70d9d0",5045:"15409acf",5076:"dac809ef",5237:"930f3313",5238:"62315191",5374:"0d91a6fd",5644:"800495f5",5709:"b7d8cc06",5880:"53ca60fd",5943:"3c376c2b",5961:"32208ce7",6186:"514bf0d7",6218:"4a47012d",6455:"ef1fb732",6522:"974fa033",7370:"c09f4ff7",7414:"393be207",7471:"4918abda",7488:"4268600b",7803:"d86ea9d6",7877:"b0c2d4a9",7918:"17896441",7957:"6bbe9cee",7980:"3cec9fd1",8446:"4d3733db",8765:"a7ed2dee",9005:"9ed3f7e5",9124:"8dd91e9d",9219:"46685d13",9391:"e79c154a",9514:"1be78505",9533:"526a1379",9817:"14eb3368",9840:"799d1b5c",9900:"97ddb87f",9938:"b8b2ccc4"}[e]||e)+"."+{53:"0d31968d",71:"28293043",140:"97ff0829",543:"2cb14e37",583:"d3f1caa0",774:"04198f1b",814:"dc8c3a26",1069:"b957d0f9",1391:"6fe58d93",1713:"510204c2",1806:"ef7828f3",1819:"f34d3a41",2197:"9efdf140",2326:"13dc8b04",2513:"e61bf0ac",2555:"7a626369",2592:"78ee6723",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3241:"58867b32",3254:"f04a7ce1",3280:"a28d7ef7",3473:"fdffa07c",3529:"2635a6a2",3624:"b93a06d0",3647:"8a359535",3702:"97372524",3775:"eab7b6fe",3821:"cfdc93a1",4004:"45aa4ca3",4009:"2d783f52",4086:"8ac1e26b",4286:"c26f34f4",4616:"d99523aa",4717:"1fd3db63",4772:"d2849b5f",4870:"7722d573",4972:"4a54fd4a",5e3:"1640402d",5045:"db80e979",5076:"5dfdad47",5237:"c34cdbc7",5238:"15026598",5374:"252ef5c1",5644:"e35d1fa8",5709:"cc78784d",5880:"c7493f11",5943:"b17f84a9",5961:"9adb02d3",6186:"8a9eba4e",6218:"ac19fce6",6455:"f4aa628b",6522:"d2d88d4b",7370:"5daee5dc",7414:"7b2d683b",7471:"fff74cd9",7488:"277fea29",7803:"6387aedb",7877:"28cf7c60",7918:"e3da5265",7957:"12808ee9",7980:"a6a15bec",8446:"161d5653",8765:"d39ad461",9005:"331a3267",9124:"cfc81d0e",9219:"b993254f",9391:"b05387e8",9514:"478c02c6",9533:"8b7f9a45",9817:"b7ea7ab7",9840:"a5032b12",9900:"60acb872",9938:"6b812a9f"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},c="portal:",r.l=(e,a,d,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(d))),a)return a(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/zh/",r.gca=function(e){return e={17896441:"7918",62315191:"5238","0d4ae5d9":"53",b08ed549:"71",dd4d0112:"140",ca896cd4:"543",e54d466b:"583","6caaddab":"774","4d500d83":"1069",b9b1b603:"1391",c292a396:"1713","5327ec85":"1806","120be503":"1819","935f2afb":"2197","5e72650a":"2326",da8f2393:"2513",c62f8b17:"2555",d6e72e2c:"2592","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237","99e8bde7":"3241","8a16f931":"3254",ef42b41f:"3280","30e5c515":"3529","44244e26":"3624","8e69991e":"3647","753c4304":"3702","6915a23a":"3775",ab57e062:"3821",d62f5d15:"4004","9f5dd207":"4009",c8a39eeb:"4086","70c47322":"4286","75dba5f8":"4616","26706ab6":"4717","14eba5d5":"4772",f2d6c892:"4870","0e70d9d0":"5000","15409acf":"5045",dac809ef:"5076","930f3313":"5237","0d91a6fd":"5374","800495f5":"5644",b7d8cc06:"5709","53ca60fd":"5880","3c376c2b":"5943","32208ce7":"5961","514bf0d7":"6186","4a47012d":"6218",ef1fb732:"6455","974fa033":"6522",c09f4ff7:"7370","393be207":"7414","4918abda":"7471","4268600b":"7488",d86ea9d6:"7803",b0c2d4a9:"7877","6bbe9cee":"7957","3cec9fd1":"7980","4d3733db":"8446",a7ed2dee:"8765","9ed3f7e5":"9005","8dd91e9d":"9124","46685d13":"9219",e79c154a:"9391","1be78505":"9514","526a1379":"9533","14eb3368":"9817","799d1b5c":"9840","97ddb87f":"9900",b8b2ccc4:"9938"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,d)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)d.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((d,c)=>f=e[a]=[d,c]));d.push(f[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var c=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var f,c,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(d);n{"use strict";var e,a,d,f,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={exports:{}};return b[e].call(d.exports,d,d.exports,r),d.exports}r.m=b,e=[],r.O=(a,d,f,c)=>{if(!d){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[d,f,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,d)=>(r.f[d](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"0d4ae5d9",71:"b08ed549",140:"dd4d0112",543:"ca896cd4",583:"e54d466b",774:"6caaddab",1069:"4d500d83",1391:"b9b1b603",1713:"c292a396",1806:"5327ec85",1819:"120be503",2197:"935f2afb",2326:"5e72650a",2513:"da8f2393",2555:"c62f8b17",2592:"d6e72e2c",3085:"1f391b9e",3235:"da6f36cd",3237:"1df93b7f",3241:"99e8bde7",3254:"8a16f931",3280:"ef42b41f",3529:"30e5c515",3624:"44244e26",3647:"8e69991e",3702:"753c4304",3775:"6915a23a",3821:"ab57e062",4004:"d62f5d15",4009:"9f5dd207",4086:"c8a39eeb",4286:"70c47322",4616:"75dba5f8",4717:"26706ab6",4772:"14eba5d5",4870:"f2d6c892",5e3:"0e70d9d0",5045:"15409acf",5076:"dac809ef",5237:"930f3313",5238:"62315191",5374:"0d91a6fd",5644:"800495f5",5709:"b7d8cc06",5880:"53ca60fd",5943:"3c376c2b",5961:"32208ce7",6186:"514bf0d7",6218:"4a47012d",6455:"ef1fb732",6522:"974fa033",7370:"c09f4ff7",7414:"393be207",7471:"4918abda",7488:"4268600b",7803:"d86ea9d6",7877:"b0c2d4a9",7918:"17896441",7957:"6bbe9cee",7980:"3cec9fd1",8446:"4d3733db",8765:"a7ed2dee",9005:"9ed3f7e5",9124:"8dd91e9d",9219:"46685d13",9391:"e79c154a",9514:"1be78505",9533:"526a1379",9817:"14eb3368",9840:"799d1b5c",9900:"97ddb87f",9938:"b8b2ccc4"}[e]||e)+"."+{53:"0d31968d",71:"28293043",140:"97ff0829",543:"2cb14e37",583:"d3f1caa0",774:"04198f1b",814:"dc8c3a26",1069:"b957d0f9",1391:"6fe58d93",1713:"510204c2",1806:"ef7828f3",1819:"f34d3a41",2197:"9efdf140",2326:"13dc8b04",2513:"e61bf0ac",2555:"7a626369",2592:"78ee6723",3085:"3a447380",3203:"d4e13d9e",3235:"4cee896d",3237:"ce1c21da",3241:"58867b32",3254:"f04a7ce1",3280:"a28d7ef7",3473:"fdffa07c",3529:"2635a6a2",3624:"b93a06d0",3647:"8a359535",3702:"97372524",3775:"eab7b6fe",3821:"cfdc93a1",4004:"45aa4ca3",4009:"2d783f52",4086:"8ac1e26b",4286:"c26f34f4",4616:"d99523aa",4717:"1fd3db63",4772:"d2849b5f",4870:"7722d573",4972:"4a54fd4a",5e3:"1640402d",5045:"db80e979",5076:"5dfdad47",5237:"c34cdbc7",5238:"fca8066f",5374:"252ef5c1",5644:"e35d1fa8",5709:"cc78784d",5880:"c7493f11",5943:"b17f84a9",5961:"9adb02d3",6186:"8a9eba4e",6218:"ac19fce6",6455:"f4aa628b",6522:"d2d88d4b",7370:"5daee5dc",7414:"7b2d683b",7471:"fff74cd9",7488:"277fea29",7803:"6387aedb",7877:"28cf7c60",7918:"e3da5265",7957:"12808ee9",7980:"a6a15bec",8446:"161d5653",8765:"d39ad461",9005:"331a3267",9124:"cfc81d0e",9219:"b993254f",9391:"b05387e8",9514:"478c02c6",9533:"8b7f9a45",9817:"b7ea7ab7",9840:"a5032b12",9900:"60acb872",9938:"6b812a9f"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},c="portal:",r.l=(e,a,d,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(d))),a)return a(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/zh/",r.gca=function(e){return e={17896441:"7918",62315191:"5238","0d4ae5d9":"53",b08ed549:"71",dd4d0112:"140",ca896cd4:"543",e54d466b:"583","6caaddab":"774","4d500d83":"1069",b9b1b603:"1391",c292a396:"1713","5327ec85":"1806","120be503":"1819","935f2afb":"2197","5e72650a":"2326",da8f2393:"2513",c62f8b17:"2555",d6e72e2c:"2592","1f391b9e":"3085",da6f36cd:"3235","1df93b7f":"3237","99e8bde7":"3241","8a16f931":"3254",ef42b41f:"3280","30e5c515":"3529","44244e26":"3624","8e69991e":"3647","753c4304":"3702","6915a23a":"3775",ab57e062:"3821",d62f5d15:"4004","9f5dd207":"4009",c8a39eeb:"4086","70c47322":"4286","75dba5f8":"4616","26706ab6":"4717","14eba5d5":"4772",f2d6c892:"4870","0e70d9d0":"5000","15409acf":"5045",dac809ef:"5076","930f3313":"5237","0d91a6fd":"5374","800495f5":"5644",b7d8cc06:"5709","53ca60fd":"5880","3c376c2b":"5943","32208ce7":"5961","514bf0d7":"6186","4a47012d":"6218",ef1fb732:"6455","974fa033":"6522",c09f4ff7:"7370","393be207":"7414","4918abda":"7471","4268600b":"7488",d86ea9d6:"7803",b0c2d4a9:"7877","6bbe9cee":"7957","3cec9fd1":"7980","4d3733db":"8446",a7ed2dee:"8765","9ed3f7e5":"9005","8dd91e9d":"9124","46685d13":"9219",e79c154a:"9391","1be78505":"9514","526a1379":"9533","14eb3368":"9817","799d1b5c":"9840","97ddb87f":"9900",b8b2ccc4:"9938"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,d)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)d.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((d,c)=>f=e[a]=[d,c]));d.push(f[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var c=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var f,c,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(d);n - + - + \ No newline at end of file diff --git a/zh/docs/category/developer-documentation/index.html b/zh/docs/category/developer-documentation/index.html index 97a1cc195aa..699f11a2e91 100644 --- a/zh/docs/category/developer-documentation/index.html +++ b/zh/docs/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/zh/docs/category/get-started-with-farming/index.html b/zh/docs/category/get-started-with-farming/index.html index cfcd3278f1a..9da9b86dd84 100644 --- a/zh/docs/category/get-started-with-farming/index.html +++ b/zh/docs/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/zh/docs/category/operators-and-staking/index.html b/zh/docs/category/operators-and-staking/index.html index a6c0623d3f7..e1858620570 100644 --- a/zh/docs/category/operators-and-staking/index.html +++ b/zh/docs/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/zh/docs/category/wallets/index.html b/zh/docs/category/wallets/index.html index 9f611f81b77..78d0360187c 100644 --- a/zh/docs/category/wallets/index.html +++ b/zh/docs/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/zh/docs/community/CODE_OF_CONDUCT/index.html b/zh/docs/community/CODE_OF_CONDUCT/index.html index 409f6c310bf..3e20bed43d3 100644 --- a/zh/docs/community/CODE_OF_CONDUCT/index.html +++ b/zh/docs/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    贡献者公约道德规范

    我们的承诺

    作为成员、贡献者和领导者,我们承诺使参与我们的社区成为每个人免受骚扰的体验,无论年龄、体型、可见或不可见的残疾、种族、性别特征、性别认同和表达、经验水平、教育、社会经济地位、国籍、个人外貌、种族、种姓、肤色、宗教或性别认同和取向。

    我们承诺以有助于建立一个开放、欢迎、多元、包容和健康的社区的方式行动和互动。

    我们的标准

    有助于为我们的社区营造积极环境的行为示例包括:

    • 对他人表现出同理心和友善
    • 尊重不同的意见、观点和经验
    • 提供和找出反馈,并且接受反馈
    • 承担责任,向那些受我们错误影响的人道歉,并从经验中吸取教训
    • 关注什么不仅对我们个人最好,而且对整个社区最好。

    不可接受行为的例子包括:

    • 使用色情语言或图像,以及任何形式的性关注或性挑逗
    • 恶搞,辱骂或者人身攻击他人
    • 公开或者私下骚扰他人
    • 在未经明确许可的情况下发布他人的私人信息,如物理或电子邮件地址
    • 在专业环境中可被合理视为不适当的其他行为

    执法责任

    社区领袖负责澄清和执行我们的可接受行为标准,并将采取适当和公平的纠正措施,以应对他们认为不适当、具有威胁性、攻击性或有害的任何行为。

    社区领导有权并有责任删除、编辑或拒绝不符合本行为准则的评论、承诺、代码、维基编辑、问题和其他贡献,并将在适当的时候传达审核决定的理由。

    范围

    本行为准则适用于所有社区空间,也适用于个人在公共空间正式代表社区的情况。 代表我们社区的示例包括使用官方电子邮件地址、通过官方社交媒体帐户发布信息,或在线上或线下活动中担任指定代表。

    强制执行

    虐待、骚扰或其他不可接受的行为可通过 [插入联系方式] 向负责执行的社区领导报告。 所有投诉都将得到迅速和公正的审查和调查。

    所有社区领导人都有义务尊重任何事件报告者的隐私和安全。

    执行准则

    机构群体领导在确定他们认为违反本行为准则的任何行为的后果时,将遵循这些机构群体影响准则:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/zh/docs/community/contribute/index.html b/zh/docs/community/contribute/index.html index 10d924a338e..a16baa6827d 100644 --- a/zh/docs/community/contribute/index.html +++ b/zh/docs/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • 试着从第三人称的角度来考虑你的代码,这对任何在你使用的技术方面有类似背景的人来说都是有意义的。
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. 创建你自己的代码分支。Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    社区

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/zh/docs/community/index.html b/zh/docs/community/index.html index 371b112f5b5..226bf9c5d0f 100644 --- a/zh/docs/community/index.html +++ b/zh/docs/community/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    将 POC 共识带到基底

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/zh/docs/community/translate/index.html b/zh/docs/community/translate/index.html index ea6c9f88825..ffe8efbea4f 100644 --- a/zh/docs/community/translate/index.html +++ b/zh/docs/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. SPOT 输入英语文本的语言翻译
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/zh/docs/developers/block_explorer/index.html b/zh/docs/developers/block_explorer/index.html index 645c5580fb1..333338b90e1 100644 --- a/zh/docs/developers/block_explorer/index.html +++ b/zh/docs/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/zh/docs/developers/faucet/index.html b/zh/docs/developers/faucet/index.html index 728152b73d8..68d6863e65e 100644 --- a/zh/docs/developers/faucet/index.html +++ b/zh/docs/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/zh/docs/developers/foundry_guide/index.html b/zh/docs/developers/foundry_guide/index.html index a9418c7cb35..7564c716ccc 100644 --- a/zh/docs/developers/foundry_guide/index.html +++ b/zh/docs/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/zh/docs/developers/general-information/index.html b/zh/docs/developers/general-information/index.html index ace344ba58e..a47aeddc2a2 100644 --- a/zh/docs/developers/general-information/index.html +++ b/zh/docs/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/zh/docs/developers/hardhat_guide/index.html b/zh/docs/developers/hardhat_guide/index.html index 93dac5271e5..cc47b423d8b 100644 --- a/zh/docs/developers/hardhat_guide/index.html +++ b/zh/docs/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/zh/docs/developers/intro/index.html b/zh/docs/developers/intro/index.html index 40f9a8f9e9f..76024e4db8d 100644 --- a/zh/docs/developers/intro/index.html +++ b/zh/docs/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/zh/docs/developers/local_development/index.html b/zh/docs/developers/local_development/index.html index fcbda5a7d04..ed5e371e08f 100644 --- a/zh/docs/developers/local_development/index.html +++ b/zh/docs/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/zh/docs/developers/quick_start/index.html b/zh/docs/developers/quick_start/index.html index ee2c26dbaac..c892e48d748 100644 --- a/zh/docs/developers/quick_start/index.html +++ b/zh/docs/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/zh/docs/developers/remix_guide/index.html b/zh/docs/developers/remix_guide/index.html index d1969ba27b7..f7b78b2b1f4 100644 --- a/zh/docs/developers/remix_guide/index.html +++ b/zh/docs/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/zh/docs/developers/setting-up-metamask/index.html b/zh/docs/developers/setting-up-metamask/index.html index a5fe4a08c84..80bc23ae95f 100644 --- a/zh/docs/developers/setting-up-metamask/index.html +++ b/zh/docs/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/zh/docs/intro/index.html b/zh/docs/intro/index.html index b78f44cf969..02025b4ca92 100644 --- a/zh/docs/intro/index.html +++ b/zh/docs/intro/index.html @@ -7,13 +7,13 @@ - +
    -
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - +
    Version: latest

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus. You can get started as long as you meet the simple requirements mentioned below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    + \ No newline at end of file diff --git a/zh/docs/operators_and_staking/intro/index.html b/zh/docs/operators_and_staking/intro/index.html index c41f69b4776..efcd1a3558d 100644 --- a/zh/docs/operators_and_staking/intro/index.html +++ b/zh/docs/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/zh/docs/operators_and_staking/operators/index.html b/zh/docs/operators_and_staking/operators/index.html index d3bb871211a..f579a036ca7 100644 --- a/zh/docs/operators_and_staking/operators/index.html +++ b/zh/docs/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/zh/docs/operators_and_staking/staking/index.html b/zh/docs/operators_and_staking/staking/index.html index ec591ced2ae..1ba18bf80b9 100644 --- a/zh/docs/operators_and_staking/staking/index.html +++ b/zh/docs/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccountId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/zh/docs/pre-release/category/community/index.html b/zh/docs/pre-release/category/community/index.html index 0c24807461a..81c9156f580 100644 --- a/zh/docs/pre-release/category/community/index.html +++ b/zh/docs/pre-release/category/community/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/zh/docs/pre-release/category/developer-documentation/index.html b/zh/docs/pre-release/category/developer-documentation/index.html index 19594d0009b..b60fdc1d3bc 100644 --- a/zh/docs/pre-release/category/developer-documentation/index.html +++ b/zh/docs/pre-release/category/developer-documentation/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/zh/docs/pre-release/category/get-started-with-farming/index.html b/zh/docs/pre-release/category/get-started-with-farming/index.html index ec988b3c2d4..85a61399dde 100644 --- a/zh/docs/pre-release/category/get-started-with-farming/index.html +++ b/zh/docs/pre-release/category/get-started-with-farming/index.html @@ -7,13 +7,13 @@ - +
    - + \ No newline at end of file diff --git a/zh/docs/pre-release/category/operators-and-staking/index.html b/zh/docs/pre-release/category/operators-and-staking/index.html index e8b45643935..c6fd6a396a0 100644 --- a/zh/docs/pre-release/category/operators-and-staking/index.html +++ b/zh/docs/pre-release/category/operators-and-staking/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/zh/docs/pre-release/category/wallets/index.html b/zh/docs/pre-release/category/wallets/index.html index 9080fb6e036..fd9efb14bc4 100644 --- a/zh/docs/pre-release/category/wallets/index.html +++ b/zh/docs/pre-release/category/wallets/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file diff --git a/zh/docs/pre-release/community/CODE_OF_CONDUCT/index.html b/zh/docs/pre-release/community/CODE_OF_CONDUCT/index.html index f156156ff82..74795faaf6a 100644 --- a/zh/docs/pre-release/community/CODE_OF_CONDUCT/index.html +++ b/zh/docs/pre-release/community/CODE_OF_CONDUCT/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    贡献者公约道德规范

    我们的承诺

    作为成员、贡献者和领导者,我们承诺使参与我们的社区成为每个人免受骚扰的体验,无论年龄、体型、可见或不可见的残疾、种族、性别特征、性别认同和表达、经验水平、教育、社会经济地位、国籍、个人外貌、种族、种姓、肤色、宗教或性别认同和取向。

    我们承诺以有助于建立一个开放、欢迎、多元、包容和健康的社区的方式行动和互动。

    我们的标准

    有助于为我们的社区营造积极环境的行为示例包括:

    • 对他人表现出同理心和友善
    • 尊重不同的意见、观点和经验
    • 提供和找出反馈,并且接受反馈
    • 承担责任,向那些受我们错误影响的人道歉,并从经验中吸取教训
    • 关注什么不仅对我们个人最好,而且对整个社区最好。

    不可接受行为的例子包括:

    • 使用色情语言或图像,以及任何形式的性关注或性挑逗
    • 恶搞,辱骂或者人身攻击他人
    • 公开或者私下骚扰他人
    • 在未经明确许可的情况下发布他人的私人信息,如物理或电子邮件地址
    • 在专业环境中可被合理视为不适当的其他行为

    执法责任

    社区领袖负责澄清和执行我们的可接受行为标准,并将采取适当和公平的纠正措施,以应对他们认为不适当、具有威胁性、攻击性或有害的任何行为。

    社区领导有权并有责任删除、编辑或拒绝不符合本行为准则的评论、承诺、代码、维基编辑、问题和其他贡献,并将在适当的时候传达审核决定的理由。

    范围

    本行为准则适用于所有社区空间,也适用于个人在公共空间正式代表社区的情况。 代表我们社区的示例包括使用官方电子邮件地址、通过官方社交媒体帐户发布信息,或在线上或线下活动中担任指定代表。

    强制执行

    虐待、骚扰或其他不可接受的行为可通过 [插入联系方式] 向负责执行的社区领导报告。 所有投诉都将得到迅速和公正的审查和调查。

    所有社区领导人都有义务尊重任何事件报告者的隐私和安全。

    执行准则

    机构群体领导在确定他们认为违反本行为准则的任何行为的后果时,将遵循这些机构群体影响准则:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/community/contribute/index.html b/zh/docs/pre-release/community/contribute/index.html index 6ac3281f038..99d90e7ff7e 100644 --- a/zh/docs/pre-release/community/contribute/index.html +++ b/zh/docs/pre-release/community/contribute/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    How to Contribute!

    You Rock!

    First off, thank you for considering contributing to the Subspace Network. It's through the amazing collaboration of people like yourself that truly makes the open source community amazing. ❤️

    Help us, Help you, Help us!

    Following these guidelines shows that you respect the time of the developers who manage and develop this open source project. In return, they should reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.

    What Can I Contribute?

    We are a fully open source project, meaning we are open to all kinds of contributions from our community. Here are a few examples of contributions that we are open to:

    • Added Content: Writing a nice guide? Submit it on the forum guides.
    • Bug Reports & Fixes: Find a bug or error? Let us know where it's hiding. Report it at the support forum.
    • Feature Requests & Implementations: Looking for a new feature? Share your ideas so we can improve.

    If you have something that is not listed, try to be as descriptive as possible and feel free to submit the pull request.

    Ground Rules

    Please refer to our Code of Conduct.

    Your First Contribution

    Simple Fix

    Please follow this pathway for minor contributions such as spelling errors, typos, rewording, etc.

    If you are adding entirely new pages, features, etc, then please refer to the Advanced portion of this section.

    1. Go to Subspace Documentation, and find the page that you would like to change.
    2. Scroll to the bottom and click Edit this page.
    3. This will open up GitHub, and direct you to the raw page on GitHub.
    4. In the top right click the pencil emoji to edit the page.
    5. GitHub will change the page to a text editor, where you will be able to make changes.
    6. Once you are satisfied with your changes, scroll to the bottom and fill out the following fields.
      • Fill out Title
      • Fill out Description
      • Click the Create a new branch for this commit and start a pull request. option
    7. Click Propose Changes
    8. On the right you will see some options, you will want to apply the most accurate labels listed.
    9. Click Create Pull Request

    🎉Congratulations! You have just submitted your first pull request! Please provide some time for a maintainer to view your pull request and approve it, or request adjustments.

    Never contributed before?

    No worries! We all start somewhere 🚀 There are several videos and resources online to show various ways to use GitHub. Check out some of these amazing guides to help get you familiar with GitHub and contributing.

    Advanced Fix

    This section presumes a better understanding of GitHub, and programming basics.

    For larger, more advanced fixes please ensure you follow the basic principles below.

    • Do not comment simple trivial code such as importing existing components, and basic HTML/CSS.
    • Do comment on complex non-trivial code, complex logic should be easy to understand.
    • All public functions need to be commented.
    • If code is trivial but could be forgotten over time, please comment.
    • 试着从第三人称的角度来考虑你的代码,这对任何在你使用的技术方面有类似背景的人来说都是有意义的。
    • Sometimes difficult to understand code needs refactoring instead of more comments.
    • Make sure the program can still build prior to pull request.

    For advanced fixes you should follow the general pathway for GitHub.

    1. 创建你自己的代码分支。Fork
    2. Do the changes locally on your system in your preferred development environment.
    3. Following the README.md instructions, test your changes locally with yarn build and yarn run serve or npm build and npm run serve to ensure there are no clear issues.
    4. Push the changes to your fork and submit a pull request by comparing across forks. Submit Pull Request

    How to report a bug or error

    We do not have any strict template that you must follow, but please provide all required information so we can quickly resolve any issues.

    • If you find an actual programming bug, please submit a GitHub issue and use the label bug.
    • If you find a grammar/spelling/content error, please submit a GitHub issue and use the label documentation.

    How to suggest a feature or enhancement

    This documentation is for the community, so any feature requests are welcome.

    • If you are requesting a feature, please submit a GitHub issue and use the label enhancement.
    • Explain why this issue is needed, and what problems it will solve.
    • Indicate if you are able/willing to help implement this feature.

    Code review process

    • The core team will take a look at any pull requests as soon as possible, generally you can expect a response within a day or two.
    • If it is a simple and non-controversial fix we will review the code and approve.
    • If there are questions, feedback, or more discussion needs to be had we will reach out to the contributor on the Pull Request to try and resolve said issues.
    • If there is no response or activity within 2 weeks of team response we may close the pull request.

    社区

    You can chat with the core team on Discord https://discord.gg/subspace-network.

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/community/index.html b/zh/docs/pre-release/community/index.html index 31a3095e28d..0c6cfadec83 100644 --- a/zh/docs/pre-release/community/index.html +++ b/zh/docs/pre-release/community/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Awesome Subspace

    caution

    Please note, all community provided resources are non-official. For clarification please refer to official materials.

    Community Groups


    Telegram

    🇹🇷 - türk telegram topluluğu

    Reddit

    🇺🇸 - English Subreddit Community

    Discord

    🇨🇳 - 中国不和谐社区

    🇰🇷 - 한국 커뮤니티

    🇷🇺 - русское дискорд-сообщество

    🇺🇦 - українська діскорд-спільнота

    Community Translations


    Whitepaper

    Articles

    Information

    F.A.Q

    Getting Started Farming

    Medium

    Getting started guide

    将 POC 共识带到基底

    Subspace is the first protocol to completely resolve the blockchain trilemma without compromise. provided by solgas

    Events

    1st AMA

    Memes & Humor


    - + \ No newline at end of file diff --git a/zh/docs/pre-release/community/translate/index.html b/zh/docs/pre-release/community/translate/index.html index bef24df8d4a..fb447ae74e5 100644 --- a/zh/docs/pre-release/community/translate/index.html +++ b/zh/docs/pre-release/community/translate/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Translation Guide

    Translation Guide

    Welcome to the Subspace Network Docs translation guide! This guide is here to help you contribute to our goal of making the Subspace Network more accessible and inclusive by providing translations. The Subspace Network is driven by a vision of a decentralized and equitable future, and we believe that overcoming language barriers is crucial to achieving this vision.

    Mission and Vision

    The Subspace Network is inherently driven by the vision of a more equitable and decentralized future. We believe that to truly fulfill our vision, we need content that caters to the linguistic diversity of the global community. Thus, the Subspace Network Translation Initiative is born.

    Our mission

    1. Deliver translated versions of our content, empowering visitors worldwide to learn about Subspace Labs in their language.
    2. Expand the global Subspace community by onboarding members across language barriers.
    3. Facilitate accessible, inclusive sharing of Subspace Labs' information and knowledge.
    4. Encourage community members to contribute translations, impacting the ecosystem significantly.
    5. Identify, connect with, and mentor passionate contributors who want to be part of the ecosystem.

    Our vision

    1. Translate essential content for Subspace community members worldwide.
    2. Support knowledge sharing across languages to foster a well-informed and educated Subspace community.
    3. Enhance the inclusivity and accessibility of Subspace by demolishing language barriers.

    As Nakamoto envisioned a more equitable and decentralized future, Subspace Labs sees a future where language is no longer a barrier but a bridge uniting the global crypto community. We are crafting a universal Subspace where everyone has a voice, a place, and a language.

    Translation Leaderboard

    Translation How-To Guide

    This guide will walk you through how to provide translations for this documentation. By contributing, you help in realizing our mission and vision, ensuring the inclusivity and accessibility of our content to non-English speakers around the world.

    Prerequisites

    Guidelines

    • Our goal is to crowdsource a multi-language environment. If a translation already exists, please review it instead of adding a second one.
    • Ensure you follow our Contributing Standards, and our Code of Conduct.

    How-To

    Below you will find the walkthrough of how to provide translations for the Subspace Network through the Crowdin translation portal.

    1. Visit the respective translation portal for which website you would like to help translate (See above)

      translate-step-1

    2. Once you have logged in and joined the project you will be taken to the project Dashboard, Select which language you would like to translate. (See below)

      translate-step-2

    3. You will find yourself at a screen with all of the source files listed, select Translate All in the top right (See Below)

      translate-step-3

    4. You will then be brought into the Translation Portal, In this portal you will find the following

      1. English Version of the Text
      2. SPOT 输入英语文本的语言翻译
      3. Automated Suggestions for text
      4. Word List that needs translating
      5. A spot for comments if something needs clarification

      translate-step-4

    5. From here you will fill in your translations as you would like and finalize once you are done.

    6. Your translation will be reviewed and approved on a timely basis, please note translations can take a couple days before they populate on the deployed documentation.

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/developers/block_explorer/index.html b/zh/docs/pre-release/developers/block_explorer/index.html index 4476d18567a..c85d64de28c 100644 --- a/zh/docs/pre-release/developers/block_explorer/index.html +++ b/zh/docs/pre-release/developers/block_explorer/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace block explorer

    Subspace Block Explorer

    Block explorer link

    This early version provides a clear and user-friendly visualization of Subspace-specific statistics that cater to the needs of our farmers and developers.

    On the top of the page, you can easily toggle between all available networks and EVM.

    BlockExplorer-1

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/developers/faucet/index.html b/zh/docs/pre-release/developers/faucet/index.html index d4cba52a633..4a42ccc8141 100644 --- a/zh/docs/pre-release/developers/faucet/index.html +++ b/zh/docs/pre-release/developers/faucet/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Subspace faucet

    How to get some test tokens

    The Faucet is available on our Discord server.

    In order to get access to the role-gated developer chat and faucet channel:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    4. As soon as you get a Developer role, the Faucet channel will become available to you.

    5. You can use a slash command /faucet your_EVM_wallet_address_here to request tokens. Faucet-1

    6. In case of a successful request, you will see the confirmation and link to the blockscout explorer shortly. Faucet-2

    7. You can request tokens once every 24 hours.

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/developers/foundry_guide/index.html b/zh/docs/pre-release/developers/foundry_guide/index.html index 1f6497c19c3..e906f9797db 100644 --- a/zh/docs/pre-release/developers/foundry_guide/index.html +++ b/zh/docs/pre-release/developers/foundry_guide/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Foundry - testing and deployment

    Testing and deploying smart contracts using Foundry


    1. Use foundryup toolchain installer

      curl -L https://foundry.paradigm.xyz | bash

      This will install foundryup, then simply follow the instructions on-screen, which will make the foundryup command available in your CLI. Running foundryup by itself will install the latest precompiled binaries: forge, cast, anvil, and chisel. See foundryup --help for more options.

      :::note If you're on Windows, you will need to install and use Git BASH or WSL, as your terminal, since Foundryup does not currently support PowerShell or Cmd. :::

    2. Once installed, create a project. Let’s name it hello_subspace.

      To initialize the project, run

      forge init hello_subspace

      cd into hello_subspace directory and let’s have a look at the project’s structure.

      Foundry-1

    3. All the necessary repo structure was created automatically, so we can start writing and testing our smart contracts right away. As you can see, there are separate directories for storing smart contracts (src) and testing smart contracts (test). Let’s have a look at the Counter.sol smart contract and add a few more functions to the standard behavior. Our smart contract will have three functions: setNumber() that sets the uint256 number to the provided value, increment() which increases the value by 1 and decrement() which decreases the value by 1.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      contract Counter {
      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }
    4. Let’s make sure that all functions are working properly by adding a couple of tests to the Counter.t.sol test file and check if they pass.

      // SPDX-License-Identifier: UNLICENSED
      pragma solidity ^0.8.13;

      import "forge-std/Test.sol";
      import "../src/Counter.sol";

      contract CounterTest is Test {
      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      assertEq(counter.number(), 3);
      }

      function testSetNumber(uint256 x) public {
      counter.setNumber(x);
      assertEq(counter.number(), x);
      }

      function testDecrement() public {
      counter.decrement();
      assertEq(counter.number(), 1);
      }
      }
    1. In our tests, we first set the initial value of number to two, then check if function increment() increases the value by 1 and if decrement() decreases the value by 1. Let’s build a project by running:

      forge build

      and ensure that tests are working as expected by running

      forge test

      Foundry-2

      Nice, all tests are passing, meaning the smart contract is working as expected.

    2. Next, there are two things we need to set, in order to deploy our smart contract:

      - We need to connect a wallet that has sufficient balance of TSSC to cover the gas fees.
      - We need to set an environment variable we will use later.

      In order to make our lives easier, let’s create a new `Makefile` as well as `.env` file at the root of our project. `.env` files are typically used to store environment variables for your application. They are particularly useful for managing settings that change between deployment environments (e.g., development, testing, staging, and production), and for storing sensitive information.

      Environment variables can include database connection details, API keys, external resource URIs, or other configuration variables that might change depending on the environment in which the application is running. In our case, we would use it to point to our Core-EVM RPC url by setting

      ```bash
      RPC_URL=https://domain-3.evm.gemini-3g.subspace.network/ws
      ```

      And then set a private key for the EVM-compatible wallet

      ```bash
      PRIVATE_KEY=”your_private_key_value”
      ```

      :::tip

      It's important to note that .env files should not be committed to your source control (like Git), especially when they contain sensitive data, like your private key. To prevent this, add .env to your .gitignore file. This helps to keep sensitive keys secure and avoids the risk of exposing them in the application's code or version control history. :::

      In the Makefile, let’s create shortcuts to the main features of the application

      ```bash
      # include .env file and export its env vars
      -include .env

      # Builds
      build:
      @forge clean && forge build --optimize --optimizer-runs 1000000

      # Deployment
      deploy:
      @forge create Counter --private-key ${PRIVATE_KEY} --rpc-url ${RPC_URL}
      ```

      We're importing the values for a `PRIVATE_KEY` and `RPC_URL` from the `.env` file.

      This allows us to run `make build` for building the project and `make deploy` for deploying the project pointing to the provided RPC and using the provided private_key.

      Let’s run

      ```
      make build
      ```

      to make sure it’s working properly.

      ![Foundry-3](/img/developers/Foundry-3.png)
    3. In order to deploy your contract using the specified RPC and PRIVATE_KEY just run

      make deploy
    4. Congratulations, you've successfully deployed your smart contract on Subspace EVM!

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/developers/general-information/index.html b/zh/docs/pre-release/developers/general-information/index.html index f1fe105f13b..efbccbb3b3f 100644 --- a/zh/docs/pre-release/developers/general-information/index.html +++ b/zh/docs/pre-release/developers/general-information/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    General information on dev tools and Subspace EVM

    What tools are available for developers?


    Developing smart contracts involves a suite of tools that aid in writing, testing and deploying code on the blockchain. Subspace utilizes an instance of the Ethereum Virtual Machine. Therefore, every tool used to build, test, and deploy smart contracts on Ethereum is also available for Subspace!

    First, Solidity is the primary programming language for writing smart contracts. It is statically typed, supports inheritance, libraries, and complex user-defined types, making it familiar for developers with a background in other statically typed languages such as C++, Java, or JavaScript.

    Integrated Development Environments (IDEs) such as the Remix IDE are often used to aid in writing smart contracts. Remix IDE is a browser-based IDE that enables you to write, deploy, and interact with Solidity smart contracts. It features a built-in static analysis tool that checks your code for common errors.

    For local development and testing, you have multiple options. You can spin up your own version of a Subspace Developer Node and farmer to deploy contracts, develop applications, and run tests. Alternatively, you can use Ethereum development tools like Hardhat or Anvil, which are fully compatible with Subspace due to their EVM compatibility.

    For deploying and interacting with smart contracts, a JavaScript provider like the one injected by the MetaMask browser extension is used. This provider enables JavaScript applications to communicate with the Subspace network or any Ethereum-compatible network. It's compatible with both ethers.js, web3.js and Web3.py, allowing developers to use either library for their blockchain operations.

    All these tools together provide an ecosystem for EVM-compatible smart contract development, making the process more manageable and efficient.

    Smart Contract


    A smart contract is a digital agreement coded into a blockchain network, designed to automatically execute or enforce the terms of a contract. These self-executing contracts, primarily developed on decentralized computer systems, eliminate the need for an intermediary by conducting transactions directly between parties. Smart contracts are transparent, traceable, and irreversible, providing immediate certainty about outcomes once preset conditions are met. They streamline various applications, from finance to supply chain management, by automating workflows and facilitating trustless interactions.

    Differences with Ethereum


    Subspace Token (TSSC) is the sole method of payment for gas within the Subspace EVM runtime. There will be a bridge to convert farmed tokens into EVM-compatible tokens to cover the gas fees, however, at the moment the only viable option to get some TSSC on your wallet is through the Subspace faucet

    What is Solidity?


    Solidity is a statically typed, contract-oriented, high-level language primarily used for implementing smart contracts on blockchain platforms like Ethereum. Its syntax is similar to that of JavaScript and C++, which makes it relatively easy for developers from those language backgrounds to pick it up. Its features such as contract classes, inheritance, complex user-defined types, and libraries bring object-oriented programming capabilities to blockchain development.

    One of the key features of Solidity is its first-class support for "contracts." These are akin to classes in object-oriented languages but are deployed on the Ethereum blockchain, allowing them to maintain a persistent state over time and interact with other contracts, the same way as objects interact in traditional programming.

    Moreover, Solidity comes with safety features, such as a robust type system and control structures, which help prevent bugs. It also provides a variety of built-in functions for performing operations like cryptographic hashing, signature verification, and address checking, making it easier to write secure code.

    The popularity of Solidity is primarily due to its design for Ethereum, the leading smart contract platform. As Ethereum gained traction for decentralized applications (dApps), Solidity became the go-to language for writing smart contracts for these applications. Furthermore, its resemblance to widely-used languages like JavaScript and C++ helped its adoption amongst developers.

    Lastly, Solidity is continually evolving with frequent updates, new features, and improvements that address the unique needs of blockchain development. This responsive development and the thriving community around it further solidify its position as the leading language for smart contract development.

    Solidity has a great community of developers and extensive documentation is available on the official website.

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/developers/hardhat_guide/index.html b/zh/docs/pre-release/developers/hardhat_guide/index.html index b2216d5364e..8442fd405e4 100644 --- a/zh/docs/pre-release/developers/hardhat_guide/index.html +++ b/zh/docs/pre-release/developers/hardhat_guide/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Hardhat

    Hardhat testing and deployment


    Hardhat is an excellent tool that facilitates building on the Ethereum Virtual Machine. It helps developers manage and automate the recurring tasks that are inherent to the process of building smart contracts and dApps, and it allows them to easily introduce more functionality around this workflow. This includes compiling and testing at the very core. Flexible deployment options also allow you to point to the Subspace EVM domain RPC to deploy your contracts and dApps.

    Official documentation for Hardhat is available on their website, but this guide will cover everything required to get you started.

    Prerequisites Make sure you have NodeJS version >=16.0 installed.

    1. Open a new terminal and run these commands to create a new folder for the project.
    mkdir subspace-hardhat
    cd subspace-hardhat
    1. Then initialize an npm project as shown below. You'll be prompted to answer some questions.
    npm install --save-dev hardhat
    npm install --save-dev @openzeppelin/contracts
    npx hardhat

    Select "Create a JavaScript Project" from the list of the available options. Select project root folder and select to create a .gitignore file (optional).

    Hardhat-1

    1. Right after you create your workspace, you will notice several folders. All of your contracts will reside inside the contracts folder, deployment scripts are available inside the scripts folder, and tests can be found inside the test folder. Click on the contracts folder and open Lock.sol.

    Hardhat-3

    1. When in Lock.sol, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest).

    Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.9;

    import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

    contract Counter is ERC20 {
    constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

    uint256 public number;

    function setNumber(uint256 newNumber) public {
    number = newNumber;
    }

    function increment() public {
    number++;
    }

    function decrement() public {
    number--;
    }
    }

    Let's also rename the filename to Counter.sol for consistency.

    1. Deploying a smart contract can be an expensive procedure due to the gas costs associated with the transaction. Hence, it’s advisable to thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, open the tests folder and examine the Lock.js file created for us. Replace the internals of the file with the following code:
    const { expect } = require("chai");

    describe("Counter", function() {
    let Counter;
    let counter;
    let owner;
    let addr1;

    beforeEach(async function() {
    Counter = await ethers.getContractFactory("Counter");
    [owner, addr1] = await ethers.getSigners();

    counter = await Counter.deploy();
    });

    describe("Counter operations", function() {
    it("Should return initial value of zero", async function() {
    expect(await counter.number()).to.equal(0);
    });

    it("Should set number to a new value", async function() {
    await counter.setNumber(5);
    expect(await counter.number()).to.equal(5);
    });

    it("Should increment the number", async function() {
    await counter.setNumber(5);
    await counter.increment();
    expect(await counter.number()).to.equal(6);
    });

    it("Should decrement the number", async function() {
    await counter.setNumber(5);
    await counter.decrement();
    expect(await counter.number()).to.equal(4);
    });
    });
    });

    For consistency, let's also rename Lock.js to CounterTest.js

    1. To run the test, simply type npx hardhat test

      Hardhat-4

    Great, looks like everything is working as expected. We’re all set for the deployment!

    1. In order to deploy the contract, we need to set a deployment network for hardhat. Open hardhat.config.js file and add the subspace to the list of networks.
    require("@nomicfoundation/hardhat-toolbox");
    module.exports = {
    solidity: "0.8.19",
    networks: {
    subspace: {
    url: "https://domain-3.evm.gemini-3g.subspace.network/ws",
    accounts: ["private_key_to_your_account"]
    }
    }
    };
    tip

    Be careful to not commit hardhat.config.js file as it contain your private key. You can use NPM tools like dotenv to securely store your private keys in the .env file.

    1. Open to deploy.js file and replace the content with the code.

    Hardhat-5

    const hre = require("hardhat");

    async function main() {
    const Contract = await hre.ethers.getContractFactory("Counter");
    const contract = await Contract.deploy();

    console.log("Contract deployed to:", contract.target);
    }

    main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
    });
    1. You're all set to deploy your smart contract on Subspace Network! In order to deploy, run npx hardhat run scripts/deploy.js --network subspace.

    This command will deploy your smart contract on the network we've just specified in hardhat.config.js file.

    In case of success deployment, you should see Contract deployed to: transaction hash.

    Hardhat-6

    1. Congratulations, you've successfully deployed your smart contract on the Subspace EVM domain!
    - + \ No newline at end of file diff --git a/zh/docs/pre-release/developers/intro/index.html b/zh/docs/pre-release/developers/intro/index.html index 4199d2c2713..151b132dbd5 100644 --- a/zh/docs/pre-release/developers/intro/index.html +++ b/zh/docs/pre-release/developers/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Developer Guide


    Subspace is a secure, scalable, decentralized blockchain that resolves the blockchain trilemma without making compromises. This guide will cover some of the main aspects of Subspace, if you’re willing to learn more about the technology behind Subspace it’s better to refer to the Whitepaper - Full-Length or Whitepaper - Summarized

    What makes the Subspace Network protocol different?


    Some new blockchain protocols, designed to be more efficient, fair, and decentralized, are using a system called Proof-of-Capacity (PoC) that prioritizes storage-intensive farming over compute-intensive mining. However, this poses a challenge known as the farmer's dilemma, where users must decide whether to allocate their limited storage to maintain the blockchain's state and history, or to use it for consensus. This may lead to a centralization of farming among a few trusted operators. Subspace, a novel Proof-of-Archival-Storage (PoAS) blockchain, resolves this issue by allowing farmers to store the blockchain's history collectively, separating the processes of consensus and computation. This results in reduced overheads and facilitates participation by regular users, even in complex execution models.

    Decoupled execution keeps farming lightweight and resistant to pooling, while the farmer storage network enables the blockchain to scale massively without becoming centralized.

    Intro-1

    What is a Proof-of-Archival-Storage?


    At Subspace, we implement a Proof-of-Archival-Storage protocol based on the following:

    • A Nakamoto (or longest-chain) consensus protocol
    • Employing a proof-of-capacity resource puzzle for space-bound Sybil resistance
    • The space reflects some useful storage (as in Proof-of-Replication)
    • And the specific data being replicated is the archival history of the Subspace chain

    In its simplest form, our Proof-of-Archival-Storage consensus is a 3-phase protocol:

    • Archiving phase: given new blocks of the chain, construct canonical history.
    • Plotting phase: given the canonical history of the blockchain, generate a unique replica (the plot) and store it on disk.
    • Consensus phase: given a challenge from a secure randomness beacon, audit the plot for a solution that satisfies some threshold, return a proof, and propose a block.

    If you’re curious to read more about our consensus, here is a great overview written by one of our researchers, Dariia Porechna.

    A few words about Subspace's consensus protocol Dilithium


    As we transition to our Dilithium v2 consensus, we've recognized the essential role polynomial schemes will play in the next era of blockchain design, just as hash functions, Merkle trees, and ECC signatures did in the previous decade. Subspace is distinctively equipped to utilize these schemes effectively due to our proof-of-archival-storage (PoAS) consensus, which enables a self-regulating feedback loop for storage costs, helping us scale with demand. This enables us to leverage polynomial schemes for linear blockspace scaling proportional to the number of network participants. We specifically employ Reed-Solomon erasure coding and Kate-Zaverucha-Goldberg (KZG) commitments in our v2 consensus, allowing efficient data recovery and authentication.

    When archiving the history of Subspace, we replace Merkle roots with KZG commitments. Farmers can then provide constant-sized Kate proofs to clients of the Distributed Storage Network (DSN) as the witness for their pledged archival storage space. We construct generic proofs-of-replication (PoR) from RS-KZG schemes and extend these into an extremely simple and efficient proof-of-archival-storage (PoAS).

    Is it difficult to build applications on Subspace Network?


    Our primary objective is to maintain a minimum barrier to entry for both our farmers and developers. The installation of a Subspace Network node can be accomplished in less than 15 minutes and is compatible with an extensive array of computer systems given the highly accessible minimum requirements for the hardware.

    When it comes to development on the Subspace Network, we offer a range of flexible options. At present, you can make use of our multiple Ethereum Virtual Machine (EVM) domains for a familiar experience. Soon, we will also provide the functionality for you to build your own local custom virtual machine if that's your preference. We take pride in the unlimited possibilities we provide - there are no boundaries!

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/developers/local_development/index.html b/zh/docs/pre-release/developers/local_development/index.html index 53d13aa65cc..3c8d920ee10 100644 --- a/zh/docs/pre-release/developers/local_development/index.html +++ b/zh/docs/pre-release/developers/local_development/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Local development

    Setting up a local development environment

    You can always set up a local network to test and deploy your smart contract!

    To establish a full local network, you need to run a local node, a Core-EVM domain, and a farmer.

    First, visit the Subspace releases page and download the most up-to-date stable versions of the node and farmer.

    tip

    For each release, there are two versions:

    1. skylake: for newer processors from around 2015 and onwards
    2. x86-64-v2: for older processors from around 2009 and some older VMs

    Older processors/VMs are no longer supported by official releases, but they can still be compiled manually if desired.

    After downloading both files that suit your system, start a node using your preferred terminal. If you want to start an EVM domain on your local machine, you need to specify:

    • Your local RPC server port
    • Your local web-socket RPC port You can do this with the following command:
    ./your_subspace_node_path --dev --alice --rpc-port 9444 -- --domain-id 3 --dev --rpc-port 8545

    This will create a local RPC on port 8545.

    Secondly, you need to start a farmer by running the following command:

     ./your_subspace_farmer_path farm --reward-address [YOUR REWARD ADDRESS] path=tmp-farm,size=100M

    You can specify the desired plot size, but 100M should be sufficient.

    And that’s it! By starting your local node and a farmer, you have your local RPC ready for testing and deploying your smart contracts! You can easily connect your MetaMask account to the local development network, as well as use Remix or Foundry in order to test and deploy smart contracts on a local network!

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/developers/quick_start/index.html b/zh/docs/pre-release/developers/quick_start/index.html index 7ea6b60ef10..23e3f3d4c22 100644 --- a/zh/docs/pre-release/developers/quick_start/index.html +++ b/zh/docs/pre-release/developers/quick_start/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Quick start

    The only tools needed to get you started


    The Quick Start is designed with the presumption that you are not a novice developer and have some basic understanding or experience. The Quick Start also anticipates that you seek a straightforward initiation into setting up a remote development environment.

    Subspace utilizes EVM (Ethereum Virtual Machine) so any tool available for Ethereum development is compatible with Subspace.

    Setup a MetaMask Wallet (or any other EVM-compatible wallet) and connect it to our custom EVM


    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC

    Get tokens to your wallet using our faucet


    Follow the instructions here to use our Faucet to get some TSSC.

    Test and deploy your smart contract


    You can use Remix, Foundry or any other tool familiar to you for testing and deploying your smart contracts. Just make sure to use our custom EVM domain and you're all set.

    If anything above sounds unfamiliar, you can always fall back to our full guide.

    Have any questions? Feel free to post them on our forum or in our Developer-chat on Discord.


    In order to get access to the role-gated developer chat:

    1. Join our Discord

    2. Click on Subspace Network at the top left corner and choose Linked Roles.

      Discord-1

    3. Link your GitHub account to get a developer role and gain access to developer-chat. Discord-2

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/developers/remix_guide/index.html b/zh/docs/pre-release/developers/remix_guide/index.html index ef6b79337d3..2a4612484cc 100644 --- a/zh/docs/pre-release/developers/remix_guide/index.html +++ b/zh/docs/pre-release/developers/remix_guide/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Remix IDE - testing and deployment

    Remix IDE guide


    Remix is a great tool that allows you to easily write, test and deploy smart contracts on any EVM-compatible blockchain. Moreover, integration with MetaMask allows the utilization of any RPC, that’s why we’ve just set up a reference to Subspace core EVM in our MetaMask wallet!

    Remix has amazing documentation, but this guide will cover everything required to get you started.

    1. Using the browser of your choice navigate to Remix website. You will see a file explorer and interface for creating new workspaces, integrations with GitHub, Gist, IPFS, HTTPS, preloaded templates, and plugins. Let’s create a new workspace by clicking on the + sign beside WORKSPACES.

      Remix-1

    2. You can enter any name and use the ERC20 template.

      Remix-2

    3. Right after you create your workspace, you will see a few folders created for you. Let’s click on contracts and have a look at MyToken.sol.

      Remix-3

    4. Here, you can change the name of your contract (in the example, to Counter), the name of the token (in this example, we're calling it SubspaceTestToken) and the token symbol (we're using TSSCtest). Let’s add a simple smart contract that has three functions - setNumber(), increment() and decrement().

       // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.9;

      import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

      contract Counter is ERC20 {
      constructor() ERC20("SubspaceTestToken", "TSSCtest") {}

      uint256 public number;

      function setNumber(uint256 newNumber) public {
      number = newNumber;
      }

      function increment() public {
      number++;
      }

      function decrement() public {
      number--;
      }
      }

      Remix-4

    5. Next, let’s compile a Counter contract. To compile, click on SOLIDITY COMPILER on the left and choose the compiler version that corresponds to the Solidity version of your contract. In our case, it’s version 0.8.9. Click on Compile MyToken.sol and check if it compiles correctly. If it does, you will see a green checkmark by the compiler.

      Remix-5

    6. Deploying a smart contract could be an expensive procedure, based on the gas costs associated with the transaction. That is why it’s recommended that you thoroughly test the smart contracts for correctness before proceeding with deployment. To test the contract, let’s open the tests folder and have a look at MyToken.sol created for us.
      Let’s first try to run a test as is without making any changes.

      Remix-6

    7. To run the tests, select SOLIDITY UNIT TESTING in the bar on the left and click Run.

      Remix-7

    8. As expected, the test failed because we manually changed the token name and symbol. This is Test Driven Development (TDD) in action! In order to make the test pass, replace the internals of MyToken.sol with the provided below code. In the test, we're adding a few assertions for the increment() and decrement() functions. In this example, we will set up an initial value of number to 2 and increment and then decrement it by 1. We would expect the number to increase to 3 and then decrease back to 2.

       pragma solidity >=0.7.0 <0.9.0;
      import "remix_tests.sol";
      import "../contracts/MyToken.sol";

      contract CounterTest is Counter {

      function testTokenInitialValues() public {
      Assert.equal(name(), "SubspaceTestToken", "token name did not match");
      Assert.equal(symbol(), "TSSCtest", "token symbol did not match");
      Assert.equal(decimals(), 18, "token decimals did not match");
      Assert.equal(totalSupply(), 0, "token supply should be zero");
      }

      Counter public counter;

      function setUp() public {
      counter = new Counter();
      counter.setNumber(2);
      }

      function testIncrement() public {
      counter.increment();
      Assert.equal(counter.number(), 3, "test increment did not match");
      }

      function testDecrement() public {
      counter.decrement();
      Assert.equal(counter.number(), 2, "test decrement did not match");
      }
      }

      Remix-8

    9. Great, all tests are now passing which means our smart contract Counter is indeed working as we expect. We’re all set to deploy it now!

      Remix-9

    10. To deploy click on the DEPLOY AND RUN TRANSACTIONS tab on the left. Remix allows you to use one of the existing EVMs or inject your own provider through its integration with MetaMask. Since we already have a MetaMask Account set up, let’s use this option.

      Remix-10

    11. You will be prompted to confirm the password with MetaMask, just make sure that the network you’re connected to is Subspace EVM.

      Remix-11

    12. Adjust the gas limit and deploy your smart contract on Subspace Core EVM. Now your transaction is recorded and you can interact with your smart contract at the bottom of the page - it's possible to call the functions increment() and decrement() as well as setNumber()

      Remix-12

    Congratulations, you've just deployed your smart contract on Subspace Core EVM!

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/developers/setting-up-metamask/index.html b/zh/docs/pre-release/developers/setting-up-metamask/index.html index 419bc27ddea..dcfc17841eb 100644 --- a/zh/docs/pre-release/developers/setting-up-metamask/index.html +++ b/zh/docs/pre-release/developers/setting-up-metamask/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ :::

    MetaMask-4

  • Watch a video to learn more about your Secret Recovery Phrase before proceeding to the next step.

    MetaMask-5

  • Have a look and write down your 12-word recovery phrase. :::info The wallet with the recovery phrase for this guide will be deleted right after the guide is complete. :::

    MetaMask-6

  • Confirm that you’ve written down the recovery phrase by filling in the missing words of your recovery phrase.

    MetaMask-7

  • Now that your wallet is created, let’s connect to the Subspace Core EVM. Click on the Ethereum Mainnet logo and select Add Network.

    MetaMask-8

  • At the settings, click on “Add a network manually”

    MetaMask-9

  • To connect to Subspace RPC specify the values below

    Network Name: Subspace EVM
    New RPC URL: https://domain-3.evm.gemini-3g.subspace.network/ws
    Chain ID: 1002
    Currency Symbol: TSSC
  • You're all set, you have successfully configured your MetaMask wallet and connected it to Subspace Core EVM. To deploy your smart contract, you first need to get a small amount of TSSC tokens into your wallet. Please make sure to refer to the faucet section of the guide to learn more about getting test tokens.

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/intro/index.html b/zh/docs/pre-release/intro/index.html index 2741a47c6a9..111e12fb949 100644 --- a/zh/docs/pre-release/intro/index.html +++ b/zh/docs/pre-release/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    👋Welcome

    The Subspace Network is an ambitious layer zero protocol which is the first scalable, secure, & decentralized infrastructure layer for the Web3 ecosystems.

    ❓ Learn About the Subspace Network


    🤝 Participate on the Network


    Our goal is to bring an extremely low barrier to entry for participating on consensus, As long as you meet the simple requirements below you can get started below.

    - Start Farming with Pulsar

    📖 Develop on Subspace Network


    The Subspace Network aims to provide an amazing developer experience to anyone who wishes to build on top of the protocol. As such we have started working on a variety of tools to help with development within our network.

    - Core Protocol Development

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/operators_and_staking/intro/index.html b/zh/docs/pre-release/operators_and_staking/intro/index.html index 1a0516fe27a..7652e681797 100644 --- a/zh/docs/pre-release/operators_and_staking/intro/index.html +++ b/zh/docs/pre-release/operators_and_staking/intro/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Introduction to Staking and Operators

    Operators are a key part in solving the farmer's dilemma

    Subspace introduces the Decoupled Execution Framework (DecEx) to tackle the state-bloat issue by separating transaction ordering from execution. Farmers confirm and order transactions, while staked operator nodes execute them, allowing different hardware requirements for each role. This keeps farming accessible and lays the groundwork for scalable execution. Users submit transactions to operators who batch them into bundles. Farmers verify and order them, with operators executing the transactions in this order. The process forms a deterministic receipt chain, with an initial implementation using an optimistic fraud-proof validation scheme.

    Key differences between farming and being an operator

    Farming

    • Consensus: This is the primary role of Farmers, and provides security and consensus for the network. Our Farmers are what ensure we don't trust, but verify.
    • Transaction Ordering: Farmers are responsible for confirming the availability of transactions and providing an ordering.
    • Lightweight Requirements: The hardware requirements for farming are designed to be lightweight, making it accessible to anyone.
    • Verification: Farmers only verify the proof-of-election and ensure that the data is available.
    • Transactions: Farmers do not execute transactions; they focus on ordering them and including them in the blockchain.

    Being an operator

    • Transaction Submission and Execution: Operators are responsible for batching transactions into bundles and submitting them to the consensus chain, executing transactions included in the consensus block and maintaining the resulting chain state.
    • Higher Hardware Requirements: Operators require more substantial hardware capabilities, as they must execute complex transactions.
    • Require Initial Investment: Operators are required to stake a certain amount of SSC. If an operator acts maliciously, their stake is at risk of being slashed. Engaging in such malicious behavior carries significant penalties, providing crypto-economic security to execution.
    • Pre-Validation and Batching: Operators pre-validate and batch transactions into bundles through a stake-weighted election process.
    • Deterministic Execution: The operators execute transactions in a specific, deterministic order, producing state commitments in the form of execution receipts.
    • Secondary Network Role: Monitors the Domain chain for malicious activity and submits fraud proofs to consensus chain.
    • Supports Various Environments: Can support different smart contract execution environments like the Ethereum Virtual Machine (EVM) or Web-Assembly (WASM).

    Operator hardware requirements

    note

    The hardware requirements have not been benchmarked, and these are our best estimates. We would appreciate your feedback if you feel that the requirements listed here are too high or too low.

    tip

    Our suggested specs are not necessarily applicable to Stake Wars. We encourage all interested participants to join Stake Wars, even if your hardware does not meet the listed requirements.

    CPU:

    • x86-64 compatible;
    • Intel Ice Lake, or newer (Xeon or Core series); AMD Zen3, or newer (EPYC or Ryzen);
    • 4 physical cores @ 3.4GHz;
    • Simultaneous multithreading disabled (Hyper-Threading on Intel, SMT on AMD);
    • Prefer single-threaded performance over higher cores count. A comparison of single-threaded performance can be found here.

    Storage:

    • An NVMe SSD of 1 TB. In general, the latency is more important than the throughput.

    Memory:

    • 32 GB DDR4 ECC.

    System:

    • Linux Kernel 5.16 or newer.

    Network:

    • The minimum symmetric networking speed is set to 500 Mbit/s.

    Staking

    The Subspace Network relies on staking from both domain operators and farmers to secure the network and provide resources. Subspace implements a Nominated Proof-of-Stake algorithm where token holders endorse operators who execute transactions and produce blocks.

    Our staking model consists of two tiers:

    • Farmers earn rewards proportional to their pledged storage. Farmers can choose to nominate operators and back them with their own stake, increasing their chance of being elected as a slot leader. Farmers, who have earned storage rewards, nominate operators to execute transactions. This nomination system balances the power between farmers who nominate and operators and both parties share the rewards and the potential penalties (slashing).

    • Operators stake to gain the right to produce bundles within a domain. They are responsible for validating and executing transactions, producing execution receipts, and applying state transitions and earn rewards for their work. The operator's chances to be elected as a slot leader and produce a bundle are weighted by their stake. Operators can be nominated by farmers or other SSC holders.

    Stake epoch

    Stake epoch is a designated period in domain blocks within a blockchain system that marks each stake allocation re-adjustment period. Occurring every StakeEpochDuration blocks (at the moment, it's set to every 100 blocks or ~10 minutes), an epoch transition triggers specific actions such as finalizing operator domain switches, deregistering operators, unlocking operators and their associated funds, and recalculating stake distribution for the Verifiable Random Function (VRF) election. These transitions are designed to adjust the stake distribution dynamically, finalize various staking-related operations, process rewards, and manage deposits and withdrawals. The uniform duration across all domains helps maintain consistency in the network, while the specific starting point for each domain's epoch transition may vary based on when it is registered, helping to amortize the load of these transitions.

    note

    Read Subspace Subnomicon to get a full picture behind decoupled execution!

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/operators_and_staking/operators/index.html b/zh/docs/pre-release/operators_and_staking/operators/index.html index 1948c8c3d7e..8f483b93389 100644 --- a/zh/docs/pre-release/operators_and_staking/operators/index.html +++ b/zh/docs/pre-release/operators_and_staking/operators/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    Operators guide

    note

    Currently, the domain chain does not support syncing from other operator nodes; it needs to be deterministically derived from the consensus chain block by block.

    Check the list of the available domains:

    In order to participate in block production, operator needs to register on a specific domain.

    note

    Any account with the minimum operator stake can become an operator.

    To check the list of available domains:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Go to Developer -> Chain state Staking-1
    4. Select domains under selected state query and choose domainRegistry
    5. Exclude option
    6. Click on + to query the chain state. Staking-2
    7. Review the list of available domains Staking-3 :::tip
      In the example above the number 3 corresponds to the domainId. :::

    Register an operator on domain

    Prefer a video? Expand for our installation video

    Create operator key:

    An operator needs a key pair to participate in bundle production. You can create a key using the following command:

    target/production/subspace-node key generate --scheme sr25519

    Staking-4

    Back up the key. Take the public key (hex) of the Keypair. The public key is part of the operator config we will be using later on PolkadotJS portal.

    Insert key to Keystore:

    The key generated above needs to be added to the Keystore so that the operator node can use it to participate in bundle production.

    To insert the key, use the following command:

    target/production/subspace-node key insert \
    --suri "<Secret phrase>" --key-type oper --scheme sr25519 --keystore-path /tmp/keystore

    The command above assumes /tmp/keystore as the keystore location. suri is the secret phrase of the operator key.

    To register an operator on the domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose registerOperator(domainID, amount, config) in the dropdown.
    5. Enter the domainId to be registered on.
    6. Enter the desired staking amount in the amount field.
    7. Put your public signing key at the signingKey field.
    note

    In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead.

    Staking-5

    info

    Make sure to use the signing key generated on the previous Create operator key step

    1. Enter minimumNominatorStake - in the example, it's set to 1 TSSC.
    2. Enter nominatorTax - in the example, it's set to 5%.
    3. Sign and submit the transaction to register an operator.

    Staking-6

    info

    Make sure to select Submit Transaction since the transaction needs to be signed.

    Once registered, the operator has to wait until the domain epoch is complete to start operating for the domain, participate in bundle production, and receive rewards.

    Once the domain epoch is finished, the operator can produce bundles from the new epoch.

    Any operator can add more stake by using the same functionality.

    Checking your operatorId

    There are two ways to check your operatorId:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorRegistered event.

      Staking-8

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for register_operator event.

      Staking-10

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters and ensure that signing_key corresponds to your signing key.

      Staking-11

    6. Scroll to Events and click on dropdown arrow for domains(OperatorRegistered).

      Staking-12

    7. Inspect and remember your domain_id.

    Start the domain operator node

    The domain operator node is running with an embedded consensus node, thus you need to specify the args for both the consensus node and the domain operator node:

    subspace-node [consensus-chain-args] -- [domain-args]

    Example: Start a node as operator on gemini-3g chain:

    target/production/subspace-node `
    --chain gemini-3g `
    --rpc-external `
    --node-key 0xxeea96fe9cfbd6c1d7e9657e36447a158c0c80432b2bc8869a1c6706707843f `
    -- `
    --domain-id 3 `
    --chain gemini-3g `
    --operator `
    --keystore-path /tmp/keystore `
    --rpc-external
    note

    Make sure to use the public key (hex) that we generated earlier in the Create Operator Key section

    You should see the node start sucesfully and begin syncing

    Staking-13

    To view the stored node information navigate to:

    FOLDERID_LocalAppData e.g.

    C:\Users\Alice\AppData\Local

    Embedded Docs

    The following command can be used to explore all parameters and subcommands:

    target/production/subspace-node --help

    Build from source

    If you prefer to build from the source rather using existing builds, the domain operator node is embedded within the subspace-node binary, please refer to Subspace node for how to build from source.

    Operator deregistration

    To deregister an operator on the domain and have your tokens released:

    info

    Only account who registered an operator can deregister it. Make sure to use the same wallet / account to sign the transaction for deregistration.

    1. Proceed to PolkadotJS

    2. Make sure to select the correct network at the top-left corner.

    3. Select the account you want to use in using the selected account.

    4. Select domains under submit the following extrinsic and choose deregisterOperator(operatorId) in the dropdown.

      Staking-14

    5. Your tokens and tokens of operator Nominators will be released after the lockingPeriod.

    6. To check the locking period you can go to Developer -> Chain state -> Constants.

    7. Select domains under selected contant query and choose stakeWithdrawalLockingPeriod.

    8. Click on + to run the query.

    Staking-15

    info

    Number 256 above corresponds to the number of the domain blocks, and not the consensus chain blocks.

    Operator Stake Withdrawal

    Operator stake withdrawal works similarly to Nominator stake withdrawal. Refer to this section to withdraw your stake.

    Switch domains

    Any Operator can switch domain they operate on anytime. In order to switch domain:

    1. Proceed to PolkadotJS
    2. Make sure to select the correct network at the top-left corner.
    3. Select the account you want to use in using the selected account.
    4. Select domains under submit the following extrinsic and choose switchDomain(operatorId, newDomainId) in the dropdown.
    5. Add your operatorId and newDomainId to the corresponding fields.

    Staking-24

    note

    Only the account who registered Operator can swith the domain.

    note

    Stake of your Nominators won't be released, but will be moved to the new domain as well.

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/operators_and_staking/staking/index.html b/zh/docs/pre-release/operators_and_staking/staking/index.html index 7b0b7d8ca0b..6df227e8ab5 100644 --- a/zh/docs/pre-release/operators_and_staking/staking/index.html +++ b/zh/docs/pre-release/operators_and_staking/staking/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Staking guide

    Select an operator to nominate

    note

    Three important factors to pay attention to are minimumNominatorStake, nominationTax, and status.

    1. Visit PolkadotJS Network Explorer.

    2. Go to Developer -> Chain state.

      Staking-16

    3. Select domains under selected state query and choose operators, exclude option and click on + to run the query.

    4. Browse the list of available operators, make sure the status is Registered and that minimumNominatorStake is lower than your staking amount.

      Staking-17

    note

    Number 17 on the screenshot above corresponds to operatorId.

    Operator Nomination using Polkadot.js

    Any account can nominate any existing operator with at least a minimum nominator stake set by the operator.

    info

    The only staking mechanism available to non-operators is nominating an operator.

    1. Make sure to select the correct network at the top-left corner.

    2. Select the account you want to use in using the selected account.

    3. Select domains under submit the following extrinsic and choose nominateOperator(operatorId, amount) in the dropdown.

    4. Set an operatorId - in the example, it's set to 1. :::note
      In the example below, 1 TSSC is selected for staking. 18 zeros are added because of the u128 type, so make sure to put 1000000000000000000 instead. :::

    5. Enter the desired amount in the amount field for staking. Staking-18

    6. Submit the signed transaction.

    Once nomination is finalized when the domain epoch is complete, the nominator will start receiving rewards.

    Any nominator can add more stake by using the same functionality.

    Check if your nomination worked succesfully.

    There are two ways to check your nomination:

    1. You can use PolkadotJS Network Explorer.

      Staking-7

    2. Browse the recent events and you should see domains.OperatorNominated event.

      Staking-19

    3. Click on the dropdown arrow to view the domainId and operatorId.


    Alternatively, you can use Subscan which is a little easier to navigate for this job.

    1. Navigate to Subspace Subscan portal.

    2. Click on Blockchain -> Extrinsics.

      Staking-9

    3. Scroll to the bottom of the page to view all recent events, search for nominate_operator event.

      Staking-20

    4. Click on Extrinsic ID for the desired event.

    5. Scroll to Parameters to view the stake value.

      Staking-21

    6. Scroll to Events and click on dropdown arrow for domains(OperatorNominated).

      Staking-22

    7. Inspect and ensure that nominatorId matches your id.

    Stake withdrawal using Polkadot.js

    Any operator or nominator can initiate withdrawal. They can withdraw the total staked amount or a portion of their stake.

    • If an operator is initiating a withdrawal, then their remaining balance should be at least the minimum operator stake, otherwise the request is rejected.
    • If a nominator is initiating a withdrawal, and the remaining balance is less than the operator-defined minimum nominator stake, then the total nominator stake is unlocked otherwise, only the requested amount is unlocked.
    1. Select the account you want to use in using the selected account.
    2. Select domains under submit the following extrinsic and choose withdrawStake(operatorId, withdraw) in the dropdown.
    3. Choose an operator by selecting an operatorId - in the example, it's set to 17.
    4. Choose the withdrawal amount in the withdraw field - you can specify to withdraw all or some staking amount.
    note

    Example of withdrawal of 1 TSSC stake amount from nominating an operator 17.

    Staking-23

    Once the withdrawal is submitted, it's finalized after the domain epoch is completed. All the withdrawn funds are unlocked after the unlocking period is complete.

    Calculating your nominator balance

    1. Proceed to PolkadotJS Network Explorer.
    2. Go to Developer -> Chain state.
    3. Select domains under selected state query and nominators(u64, AccoundId32).
    4. Provide the operatorId and select your account from the dropdown.
    5. Run the query, remember the shares number. Staking-25
    6. On the same screen, choose domainStakingSummary(u32).
    7. Provide the domainId.
    8. Run the query, remember the currentTotalStake number. Staking-26
    9. Without leaving the page, select operators(u64).
    10. Provide operatorId that you nominated previously.
    11. Run the query, remember the currentTotalStake number. Staking-27

    To calculate your nominator balance:

    1. Calculate share price by dividing currentTotalStake from the domain by operator currentTotalStake.
    2. Multiply share price and your nominator shares number.
    - + \ No newline at end of file diff --git a/zh/docs/pre-release/protocol/common_problems/index.html b/zh/docs/pre-release/protocol/common_problems/index.html index 97d7f5f99ca..e59e46f4c86 100644 --- a/zh/docs/pre-release/protocol/common_problems/index.html +++ b/zh/docs/pre-release/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/protocol/port-forwarding/index.html b/zh/docs/pre-release/protocol/port-forwarding/index.html index e95c2defb90..464a871f30a 100644 --- a/zh/docs/pre-release/protocol/port-forwarding/index.html +++ b/zh/docs/pre-release/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. 1.这将在顶部显示你的家庭路由器的 IP 地址
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. 某些 ISP 将其配置为你的 ISP 门户帐户登录信息。

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/zh/docs/pre-release/protocol/pulsar/index.html b/zh/docs/pre-release/protocol/pulsar/index.html index 0bb5fd2a4ef..09fe37c5e86 100644 --- a/zh/docs/pre-release/protocol/pulsar/index.html +++ b/zh/docs/pre-release/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -18,7 +18,7 @@ Please feel free to file bug reports on our GitHub issues.

    Prefer A video? Expand for our installation video

    Download Binaries


    Precompiled versions of the Pulsar is hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually if desired

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    null

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Please select 'Allow access' to continue farming.

    Configuration


    To start we have to initialize our Farmer, this can be done with:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init
    High RAM consumption

    Operating systems, such as Windows, allocate memory for both visible tasks and behind-the-scenes processes. While this memory can be readily freed when necessary, Windows occasionally may not display these allocations accurately due to certain system nuances. High RAM consumption should not be a cause for concern.

    This will prompt you to setup your Pulsar configurations to begin farming. You should see a similar prompt like so (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`
    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Gemini 3 Testnet


    If you are using the default configurations from Pulsar, you are ready to go with the Gemini 3 Testnet. Alternatively, you can ensure this occurs by manually setting the network like so.

    Open your settings.toml directory and ensure your chain is correctly specified to gemini-3g as so:

    # settings.toml
    [node]
    chain = 'gemini-3g'
    # ... redacted ...

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Having Trouble?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our Forums to see if your issue may have been solved, if its a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    View your Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/protocol/security/index.html b/zh/docs/pre-release/protocol/security/index.html index 087f42beb51..084e2e2d614 100644 --- a/zh/docs/pre-release/protocol/security/index.html +++ b/zh/docs/pre-release/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/protocol/substrate-cli/index.html b/zh/docs/pre-release/protocol/substrate-cli/index.html index db1f330e4a6..3190a4045af 100644 --- a/zh/docs/pre-release/protocol/substrate-cli/index.html +++ b/zh/docs/pre-release/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/protocol/timekeeping/index.html b/zh/docs/pre-release/protocol/timekeeping/index.html index 12fdf32c493..e647a96d4c8 100644 --- a/zh/docs/pre-release/protocol/timekeeping/index.html +++ b/zh/docs/pre-release/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: Pre-Release

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/zh/docs/pre-release/protocol/wallets/polkadot/index.html b/zh/docs/pre-release/protocol/wallets/polkadot/index.html index 8e742d3758b..05ebf7192f9 100644 --- a/zh/docs/pre-release/protocol/wallets/polkadot/index.html +++ b/zh/docs/pre-release/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: Pre-Release

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. 访问polkadot.JS网站并下载各自的版本。

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. 然后单击“使用生成的种子添加帐户”

      step-5

    3. 恭喜你已创建 polkadot.JS 钱包!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/zh/docs/pre-release/protocol/wallets/subwallet/index.html b/zh/docs/pre-release/protocol/wallets/subwallet/index.html index 71266cae640..d1a07b8b643 100644 --- a/zh/docs/pre-release/protocol/wallets/subwallet/index.html +++ b/zh/docs/pre-release/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: Pre-Release

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. 创建新帐户时,你将看到以下内容。

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. 检查要导入的帐户,然后检查 I have saved my mnemonic seed safely 并单击 Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. 系统将提示你允许扩展连接,选择要连接的帐户并单击 Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/zh/docs/protocol/common_problems/index.html b/zh/docs/protocol/common_problems/index.html index 11c047e16ea..8ab91b935d1 100644 --- a/zh/docs/protocol/common_problems/index.html +++ b/zh/docs/protocol/common_problems/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Common problems

    While Subspace strives to release bug-free software, users may encounter certain errors. Some of these can be safely ignored, while others require attention.

    Common problems and ways to resolve them

    Error while dialing dns telemetry

    Error while dialing /dns/telemetry.subspace.network/tcp/443/x-parity-wss/%2Fsubmit%2F
    Custom { kind: Other, error: Timeout }

    This error is related only to the telemetry server. It's something that can happen occasionally, but doesn't affect farming. You can safely ignore it.

    Farmer stuck on plotting, no progress is made in several hours

    Try restarting your node or farmer. We've noticed that sometimes, when creating larger plots, the process might appear to be stalled, but it automatically continues after some time.

    Illegal instruction (core dumped)

    This error is caused by old CPUs without necessary instruction support (e.g. ADX 4). Can be fixed by compiling software from the source on that machine.

    While processors without ADX instructions are supported, their performance will be impacted significantly compared to processors that do support ADX instructions.

    Most modern desktop processors starting with Broadwell on the Intel side and Ryzen (ZEN 1) on the AMD side do support necessary ADX instructions support and shouldn't be affected by the error.

    No rewards after multiple days of farming

    Please make sure to:

    note

    Make sure to select the correct testnet in the dropdown and tabs, e.g. gemini-3g

    Recovering missing piece failed

    ERROR single_disk_plot{disk_farm_index=0}:
    subspace_farmer_components::segment_reconstruction: Recovering missing piece failed. missing_piece_index=135

    This is not a crucial error and it can be ignored.

    Importing block consensus error

    Error importing block "block_number", consensus error: Import failed: Database

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Unable to author block in slot. No best block header

    Unable to author block in slot. No best block header: Chain lookup failed: Failed to get header for hash

    Your PC likely ran out of space. Consider freeing up some space by removing unnecessary files, and then try again. Alternatively, you may adjust the plot amount to match the available disk space

    Fast node synchronization (more than 100+ blocks per second) goes only up to ±20k blocks, then synchronization speed drops significantly.

    As the database size increases and blocks get bigger (as farmers started to produce votes), it is expected that the sync speed will settle on a smaller number. We have made some performance improvements in Gemini 3e and will do more performance tuning when the protocol is functionally complete.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN.

    subspace_farmer::single_disk_plot::piece_receiver: Couldn't get a piece from DSN. Retrying... piece_index=57

    This isn’t a bug but rather a warning, it is something to be expected on a Decentralized Storage Network. There is nothing you need to do as a user with this warning, it's likely it will come up occasionally but as long as there aren’t other more catastrophic errors it can be ignored.

    Failed to build a farmer: File exists

    0: Failed to build a farmer
    1: Single disk plot creation error: I/O error: File exists (os error 17)
    2: I/O error: File exists (os error 17)
    3: File exists (os error 17)

    The system is detecting a pre-existing installation. If this is the case, you might consider wiping the current setup and re-initializing the CLI to ensure a clean installation.

    Block import error: Potential long-range attack: block not in finalized chain.

    WARN sc_service::client::client: Block import error: Potential long-range attack: block not in finalized chain.

    The node somehow ended up being on a fork, try wiping and starting from scratch.

    Still Facing Trouble? Take a look at our forums below

    - + \ No newline at end of file diff --git a/zh/docs/protocol/port-forwarding/index.html b/zh/docs/protocol/port-forwarding/index.html index 5d4f5aacadf..476c254a366 100644 --- a/zh/docs/protocol/port-forwarding/index.html +++ b/zh/docs/protocol/port-forwarding/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    How to Forward Ports

    caution

    If you are using Linux and enabled ufw (firewall), make sure you have opened up your firewall for traffic on port 30333 with the following commands sudo ufw allow 30333/tcp for TCP and sudo ufw allow 30333/udp for UDP

    First before forwarding ports it is important to understand what that actually means. We would highly suggest reading some information on the topic, here is a guide we find helpful https://www.geeksforgeeks.org/port-forwarding-on-router-and-why-do-we-need-it/

    Forwarding ports on your router will open up one specific lane on your router to allow external traffic to flow in or out. This is usually automatically done for most applications such as port 80 for File Transfer Protocol, in our case we will need to do this manually.

    It is important to note that forwarding ports is going to be different for most routers, but we have included some general instructions, as well as some links for some major brands.

    How to Port Forward


    Additional Resources

    How to Forward Ports on Your Router

    How to Port Forward - General Guide to Multiple Router Brands - Support | No-IP Knowledge Base

    Port Forwarding in Your Router

    Step 1. Finding Default Gateway Address


    Find your local router IP Address & Computer internal IP address.

    Router IP address is only necessary to open router settings, if you know how to open router settings - do that instead.

    Find router IP Address on Linux

    1. Open up a terminal and type ip route or ip r . 1. 1.这将在顶部显示你的家庭路由器的 IP 地址
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address
    3. We will then type hostname -I | awk '{print $1}' which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on Windows

    1. Open up PowerShell and type ipconfig
      1. This will display the IP Address of your home router as Default Gateway:
    2. This command will also display your computer's internal IP address named as IPv4 Address typically something like 192.168.0.25 ensure to record this IP address as well.

    Find router IP Address on OSX

    1. Open up a terminal and type netstat -nr|grep default
      1. This will display the IP Address of your home router
    2. The top of the terminal will show the IP address typically 192.168.0.1 we will want to record this IP Address 3. We will then type ipconfig getifaddr en1 for wireless, or ipconfig getifaddr en0 for ethernet. which will return your computer's internal IP address typically something like 192.168.0.25 ensure to record this IP address as well.

    Step 2. Connecting to your router


    Now we will input the router IP Address into an Internet browser (Firefox, Chrome, Edge, etc), this will take you to some kind of login page. At this point we will need to find the default admin login information. There are typically 3 ways to locate this information.

    1. It will usually be physically located on the router, in the detailed information area where you may find a barcode, or serial number.

      • It may also be in the user manual of the router as well
    2. Sometimes it may also be given to you on an information card from your Internet technician when you first setup your internet.

    3. 某些 ISP 将其配置为你的 ISP 门户帐户登录信息。

    4. You may also attempt to google the default information, provided you have the serial number and model. Below is a website which may help in looking this information up. (Often times it's set to some generic default like Admin & Password as the credentials.

      All Default Router IP Address, Username and Passwords List | Find it Here!

    Step 3. Forwarding your ports


    The actual forwarding process will vary based on your router, below is the general process and crucial information you will need along the way.

    1. Login to your router at the login page we located in the prior steps.
    2. Advanced Settings > Port Forwarding
    3. Within the port forwarding screen we will see the following fields, all fields have been filled accordingly to our defaults, except for the Computer IP Address, you will replace this with the computer IP address you received in the first steps.
      1. Computer IP Address: 192.168.0.25
      2. Protocols: TCP, UDP
      3. Starting Port: 30333
      4. Ending Port: 30333
      • Note, that if you change from the default 30333 port on your node configuration you will need to forward the respective port used.
    4. Once you have entered the needed information click save/apply. (Note: You may have to reboot your router/router depending on the model.)
    5. You can then verify if your port has been forwarded via the following website.
      1. https://www.whatismyip.com/port-scanner/ The testing website can give false negatives, try running the farmer/node as well to test.
    - + \ No newline at end of file diff --git a/zh/docs/protocol/pulsar/index.html b/zh/docs/protocol/pulsar/index.html index 0937d3d40e8..04fe6c92e6f 100644 --- a/zh/docs/protocol/pulsar/index.html +++ b/zh/docs/protocol/pulsar/index.html @@ -7,7 +7,7 @@ - + @@ -17,7 +17,7 @@ If you're connected directly without any router, then again nothing needs to be done in such case.

    Step 2: Installation

    ALPHA SOFTWARE

    Pulsar is in alpha. Please feel free to file bug reports on our GitHub issues.

    Prefer a video? Expand this section to view the installation video.

    Download Pulsar


    Precompiled versions of Pulsar are hosted on GitHub. This is the recommended way to install the application. Please find the appropriate binary for your operating system.

    caution

    Some older processors/VMs are no longer supported by official releases, but can still be compiled manually.

    1. Download the Release Binary below.
    Expand for Version 2 - For older processors since ~2009 and some old VMs
    Expand for Version 3 - For newer processors since ~2015
    1. Open Powershell, type cd Downloads (or cd Your-File-Location).
    Warning

    The warning below may appear because the application is trying to access the internet. This is expected as it is how the farmer talks to other farmers on the network. Select 'Allow access' to continue farming.

    Windows Defender Firewall

    Step 3: Configuration


    Our next step is to initialize our Farmer, this can be done by running the command below:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe init

    This will prompt you to configure your Pulsar settings for farming. You should see a similar prompt to the one below (some info might be different than shown here w.r.t your OS):

    version: 0.6.0

    Configuration creation process has started...
    Do you have an existing farmer/reward address? [y/n]: y
    Enter your farmer/reward address: REDACTED_ADDRESS
    Enter your node name to be identified on the network (defaults to `username`, press enter to use the default):
    Specify a path for storing plot files (press enter to use the default: `"/home/username/.local/share/pulsar/farms"`):
    Specify a path for storing node files (press enter to use the default: `"/home/username/.local/share/pulsar/node"`):
    Specify a plot size (defaults to `2.0 GB`, press enter to use the default):
    Specify the chain to farm. Available options are: [Gemini3f, Dev, DevNet].
    Defaults to `Gemini3f`, press enter to use the default:
    Configuration has been generated at /home/username/.config/pulsar
    Ready for lift off! Run the follow command to begin: `"path/to/executable" farm`

    Step 4: Farming


    To begin farming on the network, just run the farm command with the CLI like so:

    ./pulsar-windows-x86_64-skylake-v0.6.14-alpha.exe farm

    You should see the farmer and node start successfully and begin syncing, plotting, and then farming:

    Starting node ... (this might take up to couple of minutes)
    Node started successfully!
    Starting farmer ...
    Farmer started successfully!
    Initial plotting for plot: #0 (/home/username/.local/share/pulsar/farms)
    ⠁ [00:00:00] 3% [=> ]
    (31.00 MiB/953.67 MiB) 157.35 GiB/s, plotting, ETA: 0s

    That's it! Enjoy and Happy Farming!

    Troubleshooting


    Required ports

    Currently, a few ports need to be exposed for node to work properly.

    If you have a server with no firewall, there is nothing to be done, but otherwise make sure to open the following TCP ports for incoming connections.

    • 30333
    • 30433
    • 30533

    On the desktop side if you have a router in front of your computer, you'll need to forward TCP ports to the machine on which your node is running (how this is done varies from router to router, but there is always a feature like this, refer to How to Forward Ports for a more in-depth tutorial). If you're connected directly without any router, then again nothing needs to be done in such case.

    Inspecting Pulsar Logs

    A good place to start if you are facing trouble is by viewing your logs and seeing if there are any errors or insights that might be available. You can find the location for your logs below

    Your Logs will be found in %USERPROFILE%/AppData/Local/pulsar/logs

    Wipe Node & Farmer

    Updated from a previous version and now having issues?

    Occasionally after updating to a new version of the Pulsar you will need to wipe your node and farmer, generally this should not be required but can be attempted if your farmer is having issues after having had worked fine previously.

    To simply restart the node, go to the terminal where you started the farm command, and press Ctrl + C you should see a shutdown message appear and the application will attempt a simple shutdown, if you dont see the message press Ctrl + C again to force shutdown. You can then simply start the farmer again with the farm command you used prior.

    Use the same file name as the previous init and farm steps, then add the wipe command to free the previous storage that was being used. Generally, only do this if you have severe errors and are prompted by a staff member.

    ./pulsar-file-name wipe

    After wiping, follow the init and farm steps above to start farming again!

    Finding your settings.toml

    After running pulsar init, the prompt will display where the settings.toml is generated. However in case you missed it, you can find the file based on your operating system:

    Your settings.toml will be found in $FOLDERID_RoamingAppData/pulsar/settings.toml

    Still having trouble with your farmer?

    If you are facing issues with your node/farmer you can try a few of the following things below, if you are unable to get your issue resolved please check our forum to see if your issue may have already been solved, if it's a new one feel free to post it! You can also join our Discord for additional Peer to Peer help.

    info

    We have included a few tutorials below that may help you in your support journey, this is not an all inclusive list but we welcome contributions

    Advanced settings

    Moving the Farming Process to the Background

    Learn More about Tmux

    If you want to learn more about Tmux and its options check out their Repo here

    • Create a new tmux session using a socket file named farming
    $ tmux -S farming
    • Move process to background by detaching
    Ctrl+b d OR ⌘+b d (Mac)
    • To re-attach
    $ tmux -S farming attach
    • Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
    $ tmux new-session -A -D -s farming
    • To delete farming session
    $ tmux kill-session -t farming

    Local Development


    To run Pulsar in a local development mode, modify your settings.toml and ensure your chain points to dev:

    # settings.toml
    [node]
    chain = 'dev'
    # ... redacted ...

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Pulsar as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/zh/docs/protocol/security/index.html b/zh/docs/protocol/security/index.html index 0d2f5680d74..6b128e57e2a 100644 --- a/zh/docs/protocol/security/index.html +++ b/zh/docs/protocol/security/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Safety and Security

    Navigating the internet and being part of a crypto project can be exciting! But it's crucial to use good security practices. This way, we can protect our digital community from cyber attacks, and enjoy our Subspace journey with peace of mind.

    Wallet security


    NEVER SHARE YOUR KEYS

    Under any circumstances, do not share your 12-word seed phrase or private keys.

    Use strong passwords

    MOST ACCOUNT HACKS HAPPEN BECAUSE OF WEAK OR STOLEN PASSWORDS

    Make sure to make your password long and mix letters, numbers, and special symbols.

    One of common hacking methods is called "dictionary attack". It happens when a password consists of common and related words.

    Weak password example:

    PickleRick!

    Strong password example:

    hvDn@Hy#Gp5@jC*WH7

    Another way your password can get stolen is if you use information that can be found online or through social engineering (for example: your name, date of birth, or the city you live in).

    Here's how to make a strong password:

    • Make it as long as the system allows.
    • Use both upper and lower case letters, numbers, and symbols.
    • Don't use personal information.
    • Avoid everyday words.

    Use unique passwords

    Password leaks happen on various websites. Don't reuse any of your existing passwords for your wallet to increase the security of your assets.

    Use a password manager

    Using a password manager is a preferable way to keep your passwords.

    Popular password managers offer the following services:

    • Encrypted password storage
    • Strong password generator for new sign-ups
    • Alerts of data breaches
    • Free tiers

    Example of a recommended password manager: Bitwarden.

    Use a hardware wallet

    A hardware wallet is by far the most secure way to store your private keys. Unlike online exchanges and wallets, hardware wallets store keys offline and locally and drastically reduce the chance of being hacked.

    The most popular hardware wallets are Ledger and Tresor.

    Community security


    WE NEVER DM FIRST

    Remember: Subspace team members will never send you direct messages first. If that happens to you, ignore the message and block the sender.

    Do not click on any links on our forum, Discord, or Telegram if these links are not posted by one of team members. Scammers may easily change their malicious links to make them look like legit websites, so the easiest way to stay safe is to avoid such messages at all.

    - + \ No newline at end of file diff --git a/zh/docs/protocol/substrate-cli/index.html b/zh/docs/protocol/substrate-cli/index.html index 14f9285c8a4..47ac73766fc 100644 --- a/zh/docs/protocol/substrate-cli/index.html +++ b/zh/docs/protocol/substrate-cli/index.html @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ Increasing the values of the farmer parameters could increase the plotting speed.

    --out-connections
    --pending-out-connections

    Build from source (Linux)

    If you're running unsupported Linux distribution or CPU architecture, you may try to build binaries yourself from source.

    NOTE: This is primarily targeted at tech-savvy users and not recommended unless you know what you're doing. Please try to find answer to your question online before reaching out to maintainers.

    You'll have to have Rust toolchain installed as well as LLVM, Clang and CMake in addition to usual developer tooling (Ubuntu example):

    sudo apt-get install llvm clang cmake
    LLVM + Clang 16

    The build with LLVM + Clang 16 ends with UnknownOpcode(192) error due to breaking changes concerning WASM in LLVM 16. You can read more about this issue here. At this point, the solution is to use LLVM + Clang 15 and add the -Z build-std flag to the cargo build command.

    Now clone the source and build snapshot snapshot-2023-aug-18 (replace occurrences with the snapshot you want to build):

    git clone https://github.com/subspace/subspace.git
    cd subspace
    git checkout snapshot-2023-aug-18
    cargo build \
    --profile production \
    --bin subspace-node \
    --bin subspace-farmer

    You'll find two binaries under target/production directory once it succeeds, after which refer to instructions above on how to use them.

    V. Having Trouble?

    If you are having some issues with running the node or the farmer for the subspace network, feel free to join our Discord or even better you can take a look at our Forums and review and existing questions or post a new one if needed!

    - Forums

    - Discord

    Enable Rust Backtrace

    When running the Subspace Network Farmer & Node, sometimes you may encounter an error message that includes a line similar to the following:

    Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.

    This error message means that Rust (the programming language that Subspace Network Farmer & Node is written in) has encountered a problem and has provided a diagnostic backtrace that can help diagnose the issue. However, by default, the backtrace is not displayed. To see the backtrace, you need to enable the RUST_BACKTRACE environment variable.

    In this section, we will show you how to enable the RUST_BACKTRACE environment variable on Linux, macOS, and Windows (PowerShell).

    Enabling RUST_BACKTRACE on Windows (PowerShell)

    To enable the RUST_BACKTRACE environment variable on Windows using PowerShell, follow these steps:

    1. Open a PowerShell window.

    2. Type the following command:

      $Env:RUST_BACKTRACE=1
    3. Press Enter.

    4. After exporting the environment variable, run the Subspace Network Farmer & Node as usual, and any errors encountered will display the backtrace.

    - + \ No newline at end of file diff --git a/zh/docs/protocol/timekeeping/index.html b/zh/docs/protocol/timekeeping/index.html index 3c37c332459..d685c1c170c 100644 --- a/zh/docs/protocol/timekeeping/index.html +++ b/zh/docs/protocol/timekeeping/index.html @@ -7,13 +7,13 @@ - +
    Version: latest

    Timekeeping

    Timekeeping is an essential component of securing the protocol. Without at least one timekeeper online there would be no block production. While it is possible to run a farmer or operator node with timekeeping activated, the ideal is that a high-spec, dedicated machine is used to mitigate processing loads altering the quality of the work they do.

    Having a good number of timekeepers distributed geographically is our goal to foster a healthy network. Our hope is that our dedicated community run a number in addition to those being run by the team to ensure resilience and decentralization of the protocol.

    You can read more about timekeeping in the Proof-of-Time section of The Subnomicon.

    Hardware Requirements

    Being a timekeeper has high hardware requirements to ensure that a user with a stronger machine is not able to consistently beat every other timekeeper on the network. All timekeepers are in a race with each other to generate their proofs and we need a grid of equally provisioned F1 cars rather than a mix of classes with varying power.

    Note that these specs are our starting point and are subject to change as we discover the exact characteristics required to be a good timekeeper.

    HardwareSpecs
    CPU4 core+ with as high a frequency as possible. An overclocked Intel 14900k is the ideal. Note that only 1 core will be occupied with timekeeping.
    RAM8GB+
    Storage100GB SSD

    Command Line Parameters

    There are two new CLI options on the node visible with --help:

    • --timekeeper - to become a timekeeper.
    • --timekeeper-cpu-cores - to specify which cores timekeeper should use rather than random cores.
    - + \ No newline at end of file diff --git a/zh/docs/protocol/wallets/polkadot/index.html b/zh/docs/protocol/wallets/polkadot/index.html index 6e4b9d49964..e4ca1bdc118 100644 --- a/zh/docs/protocol/wallets/polkadot/index.html +++ b/zh/docs/protocol/wallets/polkadot/index.html @@ -7,7 +7,7 @@ - + @@ -15,7 +15,7 @@
    Version: latest

    Polkadot.js

    note

    Polkadot.js is a Substrate/EVM wallet created by the creators of Substrate & Polkadota/Kusama the Parity Team.

    This is the barebones wallet. This is because it is the barebones Substrate wallet that supports all Substrate based networks. This is an extension that works similarly to MetaMask, or most other browser based wallets you’ve likely used in the past.

    Create A New Wallet

    1. 访问polkadot.JS网站并下载各自的版本。

      :::tip The Chrome option will work on all Chromium based browsers such as Brave, Vivaldi, & Edge

    :::

    1. Once extension is installed, Open it and click +, & Create new account

      step-2

    2. The extension will then show you your 12-word mnemonic seed.

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-3](/img/doc-imgs/polkadot/step-3.png)
    1. Once you seed is securely stored and saved, click the “I have saved my mnemonic seed safely” check box and click “Next Step”

    2. The next step will ask for a Name & Password for the wallet. 然后单击“使用生成的种子添加帐户”

      step-5

    3. 恭喜你已创建 polkadot.JS 钱包!

      step-6

    Importing an Existing Seed

    Some users may be provided an existing mnemonic seed phrase that may have been provided by Subspace-Desktop, if this is the case you will want to follow this portion of the guide.

    1. Install the Extension (See step 1 of the previous section)

    2. Once extension is installed, Open it and click +, & Import account from pre-existing seed

      step-2a

    3. Type or Paste in your 12-Word mnemonic seed phrase & click Next

      step-3a

    4. The next step will ask for a Name & Password for the wallet. then click Add the account with the supplied seed

      step-4a

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official Polkadot.js Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right below your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the ... menu and setting the Allow Use on Any Chain dropdown to Subspace Testnet, once you exit you will see the public address now starts with st

      trouble-2

      trouble-10

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • As seen below, sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.

      trouble-3

    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. You will be prompted to allow the extension to connect, click Yes, allow this application access

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-7

    6. You will get a popup from the extension asking you to confirm click Yes, do this metadata update

      trouble-8

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-11

    2. You will then enter your wallet password and click I want to export this account

      trouble-12

    - + \ No newline at end of file diff --git a/zh/docs/protocol/wallets/subwallet/index.html b/zh/docs/protocol/wallets/subwallet/index.html index f83e02eb0c2..a2f533698e8 100644 --- a/zh/docs/protocol/wallets/subwallet/index.html +++ b/zh/docs/protocol/wallets/subwallet/index.html @@ -7,14 +7,14 @@ - +
    Version: latest

    SubWallet (Recommended)

    note

    SubWallet is a 3rd party Substrate/EVM wallet created by the Subwallet Team.

    This guide will be following the browser extension pathway. There is also a mobile application available for Android and IOS.

    SubWallet is a user-friendly Web3 Multiverse Gateway for the Substrate ecosystem. Our vision is to provide you with the simplest and most secure way to connect to blockchain-based applications.

    To learn more about SubWallet visit their Website.

    Create or Import A New Wallet

    1. Visit the SubWallet website and Download your respective version.

    2. Once extension is installed, Open it and click +, & Get Started

      step-2

    3. The extension will give you up to four options. You will most likely want to select Create New Account

      :::tip If you would like to Import an **Existing** Wallet, then select `Import from pre-existing seed`

      :::

      ![step-3](/img/doc-imgs/subwallet/create-new.png)
    4. 创建新帐户时,你将看到以下内容。

      :::info Info SubWallet supports Substrate and EVM, so when a wallet is generated you will see the top option which is simply the substrate chain information, then a section labeled EVM which is evm wallet information. **For subspace, we currently have no EVM integrations so you can disregard this portion.**

      :::

      ![step-4](/img/doc-imgs/subwallet/select-account.png)
    1. 检查要导入的帐户,然后检查 I have saved my mnemonic seed safely 并单击 Next

      :::danger MAKE SURE YOU STORE THIS SECURELY, AND NEVER SHARE IT

    :::

    ![step-5](/img/doc-imgs/subwallet/next-step.png)
    1. Next we will create a password for our wallet. (Make sure not to reuse passwords!)

      step-6

    2. Next Subwallet will ask you which networks you want to enable, Scroll down and select the Subspace Testnet/s including any other substrate based networks you may like to use in the future, click Confirm

      step-7

    3. Congratulations you have fully created your substrate wallet with subwallet!

    Adding New Networks to SubWallet

    caution

    This tutorial assumes you have already completed the setup for SubWallet. If you have not please refer to the section above

    SubWallet supports adding custom networks. This can be helpful for in-development networks such as the Subspace Network as we have regularly changing RPC endpoints and versions of testnets, and soon various domains. Below you will find a simple guide on how to add these new networks. Additionally we will try and keep an updated list of active RPC endpoints below for development.

    RPC Endpoints
    • Gemini 3d Endpoint: wss://rpc.gemini-3d.subspace.network/ws
    • Gemini 3e Endpoint: wss://rpc.gemini-3e.subspace.network/ws
    • Gemini 3f Endpoint: wss://rpc.gemini-3g.subspace.network/ws
    1. Open SubWallet, Select the 3 Line menu in the top left of the wallet

      rpc-step-1

    2. Inside the settings menu you will see the option to Manage Networks, click this.

      rpc-step-2

    3. Within the Manage Networks menu you will see a + in the top right corner, click this

      rpc-step-3

    4. This will open the Import Network menu, where you will see a few options

      • Provider URL
      • Network Name
      • Symbol
      • Block explorer
      • Crowdloan URL

      The only option that is required is the Provider URL. You can add an explorer if you would like but it is not required. (The current Subspace Explorer is available here.

      You can refer to the RPC Endpoints above for available provider URLs for the Subspace Network.

      rpc-step-4

    5. Fill in the provider URL, once you click out of this box it will check the URL and add the rest of the information, then click Save.

      • In this example we will be using wss://rpc.devnet.subspace.network

      rpc-step-5

    6. You will then be taken back to the network screen where you can then see your new network that was added.

      rpc-step-6

    Troubleshooting

    If you face any trouble or would like to learn about other features for SubWallet, please see the Official SubWallet Documentation. We have included some basic FAQ's below.

    How can I find my Public Address?

    • You can see your default substrate public address right next to your Wallet name inside the extension

      trouble-1

    • You can see your Subspace Testnet public address via the dropdown menu and setting the chain to Subspace Testnet, once you done you will see the public address now starts with st

      step-8

    I Dont see Subspace Testnet or any Subspace Networks as an option in chain settings

    • Sometimes when you first install or update the Substrate wallet you will need to update the wallet metadata.
    1. Go to the Subspace/Polkadot Explorer here: Polkadot/Substrate Portal

    2. 系统将提示你允许扩展连接,选择要连接的帐户并单击 Connect

      trouble-4

    3. On the Webpage, click settings

      trouble-5

    4. Click Metadata

      trouble-6

    5. Click Update Metadata

      trouble-3

    6. You will get a popup from the extension telling you that your metadata is out of date, confirming that you want to update. Click Approve

      trouble-4

    7. You will now see Subspace Testnet as an option on the Allow use on any chain dropdown.

      trouble-9

    How do I backup my wallet?

    1. You can backup/export your wallet via the ... menu, then click Export Account

      trouble-6

    2. You will then enter your wallet password and click which preferred export method you would like to use, either Private Key, QR, or JSON

      trouble-7

    - + \ No newline at end of file diff --git a/zh/index.html b/zh/index.html index c3b2926aa3a..f616ab46670 100644 --- a/zh/index.html +++ b/zh/index.html @@ -7,13 +7,13 @@ - +

    从任何地方农场

    通过承诺额外的磁盘来运行农民节点以获得奖励。不需要昂贵的设置或预付资本。

    'Lightweight'

    'Run the farmer node in the background on your computer without affecting your daily usage, with minimal maintenance.'

    'Easy to setup'

    'To set up the application takes only a few minutes. It supports Linux, Windows and macOS operating systems.'

    'Frequent rewards'

    'Get rewarded by contributing to a globally distributed network that gives control back to users and creators.'

    - + \ No newline at end of file diff --git a/zh/markdown-page/index.html b/zh/markdown-page/index.html index f1d574b261e..0fdd596c392 100644 --- a/zh/markdown-page/index.html +++ b/zh/markdown-page/index.html @@ -7,13 +7,13 @@ - + - + \ No newline at end of file