diff --git a/404.html b/404.html index f7753c7..d3c5e1d 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | Astria Docs - - + +
-
Skip to main content

Page Not Found

We could not find what you were looking for.

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

- - +
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/CNAME b/CNAME deleted file mode 100644 index 72a66b0..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.astria.org \ No newline at end of file diff --git a/assets/images/sequencer-faucet-63615ccc21b8c454150825d608e5dea6.png b/assets/images/sequencer-faucet-63615ccc21b8c454150825d608e5dea6.png new file mode 100644 index 0000000..64b7d32 Binary files /dev/null and b/assets/images/sequencer-faucet-63615ccc21b8c454150825d608e5dea6.png differ diff --git a/assets/js/0b52e64f.66c2ac88.js b/assets/js/0b52e64f.66c2ac88.js deleted file mode 100644 index 04ff4f3..0000000 --- a/assets/js/0b52e64f.66c2ac88.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[167],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>h});var n=r(7294);function l(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 a(e){for(var t=1;t=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}var i=n.createContext({}),c=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(i.Provider,{value:t},e.children)},p="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,l=e.mdxType,o=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(r),m=l,h=p["".concat(i,".").concat(m)]||p[m]||d[m]||o;return r?n.createElement(h,a(a({ref:t},u),{},{components:r})):n.createElement(h,a({ref:t},u))}));function h(e,t){var r=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=r.length,a=new Array(o);a[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[p]="string"==typeof e?e:l,a[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=r(7462),l=(r(7294),r(3905));const o={sidebar_position:2},a="Running the Dev Cluster Locally",s={unversionedId:"dev-cluster/run-dev-cluster-locally",id:"dev-cluster/run-dev-cluster-locally",title:"Running the Dev Cluster Locally",description:"Installation",source:"@site/docs/dev-cluster/2-run-dev-cluster-locally.md",sourceDirName:"dev-cluster",slug:"/dev-cluster/run-dev-cluster-locally",permalink:"/docs/dev-cluster/run-dev-cluster-locally",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/dev-cluster/2-run-dev-cluster-locally.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docsSidebar",previous:{title:"Dev-Cluster Overview",permalink:"/docs/dev-cluster/overview"},next:{title:"Running a Local Rollup",permalink:"/docs/dev-cluster/deploy-a-local-rollup"}},i={},c=[{value:"Installation",id:"installation",level:3},{value:"Deployment",id:"deployment",level:3}],u={toc:c},p="wrapper";function d(e){let{components:t,...r}=e;return(0,l.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"running-the-dev-cluster-locally"},"Running the Dev Cluster Locally"),(0,l.kt)("h3",{id:"installation"},"Installation"),(0,l.kt)("p",null,"You will need to pull both the ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"dev-cluster")," and ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria-web3"},"astria-web3")," repos from our github."),(0,l.kt)("p",null,"Install the necessary dependencies and tools listed for each repo:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"docker - ",(0,l.kt)("a",{parentName:"li",href:"https://docs.docker.com/get-docker/"},"https://docs.docker.com/get-docker/")),(0,l.kt)("li",{parentName:"ul"},"kubectl - ",(0,l.kt)("a",{parentName:"li",href:"https://kubernetes.io/docs/tasks/tools/"},"https://kubernetes.io/docs/tasks/tools/")),(0,l.kt)("li",{parentName:"ul"},"helm - ",(0,l.kt)("a",{parentName:"li",href:"https://helm.sh/docs/intro/install/"},"https://helm.sh/docs/intro/install/")),(0,l.kt)("li",{parentName:"ul"},"kind - ",(0,l.kt)("a",{parentName:"li",href:"https://kind.sigs.k8s.io/docs/user/quick-start/#installation"},"https://kind.sigs.k8s.io/docs/user/quick-start/#installation")),(0,l.kt)("li",{parentName:"ul"},"just - ",(0,l.kt)("a",{parentName:"li",href:"https://just.systems/man/en/chapter_4.html"},"https://just.systems/man/en/chapter_4.html"))),(0,l.kt)("p",null,"For contract deployment:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Forge (part of Foundry) - ",(0,l.kt)("a",{parentName:"li",href:"https://book.getfoundry.sh/getting-started/installation"},"https://book.getfoundry.sh/getting-started/installation"))),(0,l.kt)("h3",{id:"deployment"},"Deployment"),(0,l.kt)("admonition",{type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"Make sure that Docker is running before deploying with ",(0,l.kt)("inlineCode",{parentName:"p"},"just"),".")),(0,l.kt)("p",null,"To deploy the Astria Sequencer and a local DA, open a terminal in the dev-cluster directory and run the commands: "),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"# create control plane cluster\njust create-cluster\n# ingress controller\njust deploy-ingress-controller\n# wait for ingress.\njust wait-for-ingress-controller\n# Deploys Sequencer + local DA\njust deploy-astria-local\n")),(0,l.kt)("p",null,"This may take a minute or two if this the first time you are deploying as quite\na few containers need to be downloaded. Once the command completes, all elements\nof the dev-cluster will be up and running. This does not run a rollup, block\nexplorer, or faucet. "),(0,l.kt)("p",null,"Now that the sequencer and DA are running, the next step is to deploy a rollup."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0b52e64f.8bd87348.js b/assets/js/0b52e64f.8bd87348.js new file mode 100644 index 0000000..7eeb875 --- /dev/null +++ b/assets/js/0b52e64f.8bd87348.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[167],{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 l(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 a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),c=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(i.Provider,{value:t},e.children)},p="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,l=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(r),m=o,h=p["".concat(i,".").concat(m)]||p[m]||d[m]||l;return r?n.createElement(h,a(a({ref:t},u),{},{components:r})):n.createElement(h,a({ref:t},u))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[p]="string"==typeof e?e:o,a[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const l={sidebar_position:2},a="Running the Dev Cluster Locally",s={unversionedId:"dev-cluster/run-dev-cluster-locally",id:"dev-cluster/run-dev-cluster-locally",title:"Running the Dev Cluster Locally",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/dev-cluster/2-run-dev-cluster-locally.md",sourceDirName:"dev-cluster",slug:"/dev-cluster/run-dev-cluster-locally",permalink:"/docs/dev-cluster/run-dev-cluster-locally",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/dev-cluster/2-run-dev-cluster-locally.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docsSidebar",previous:{title:"Dev-Cluster Overview",permalink:"/docs/dev-cluster/overview"},next:{title:"Running a Local Rollup",permalink:"/docs/dev-cluster/deploy-a-local-rollup"}},i={},c=[{value:"Installation",id:"installation",level:2},{value:"Deployment",id:"deployment",level:2}],u={toc:c},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"running-the-dev-cluster-locally"},"Running the Dev Cluster Locally"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,o.kt)("h2",{id:"installation"},"Installation"),(0,o.kt)("p",null,"You will need to pull both the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"dev-cluster")," and ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria-web3"},"astria-web3")," repos from our github."),(0,o.kt)("p",null,"Install the necessary dependencies and tools listed for each repo:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"docker - ",(0,o.kt)("a",{parentName:"li",href:"https://docs.docker.com/get-docker/"},"https://docs.docker.com/get-docker/")),(0,o.kt)("li",{parentName:"ul"},"kubectl - ",(0,o.kt)("a",{parentName:"li",href:"https://kubernetes.io/docs/tasks/tools/"},"https://kubernetes.io/docs/tasks/tools/")),(0,o.kt)("li",{parentName:"ul"},"helm - ",(0,o.kt)("a",{parentName:"li",href:"https://helm.sh/docs/intro/install/"},"https://helm.sh/docs/intro/install/")),(0,o.kt)("li",{parentName:"ul"},"kind - ",(0,o.kt)("a",{parentName:"li",href:"https://kind.sigs.k8s.io/docs/user/quick-start/#installation"},"https://kind.sigs.k8s.io/docs/user/quick-start/#installation")),(0,o.kt)("li",{parentName:"ul"},"just - ",(0,o.kt)("a",{parentName:"li",href:"https://just.systems/man/en/chapter_4.html"},"https://just.systems/man/en/chapter_4.html"))),(0,o.kt)("p",null,"For contract deployment:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Forge (part of Foundry) - ",(0,o.kt)("a",{parentName:"li",href:"https://book.getfoundry.sh/getting-started/installation"},"https://book.getfoundry.sh/getting-started/installation"))),(0,o.kt)("h2",{id:"deployment"},"Deployment"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that Docker is running before deploying with ",(0,o.kt)("inlineCode",{parentName:"p"},"just"),".")),(0,o.kt)("p",null,"To deploy the Astria Sequencer and a local DA, open a terminal in the dev-cluster directory and run the commands: "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# create control plane cluster\njust create-cluster\n# ingress controller\njust deploy-ingress-controller\n# wait for ingress.\njust wait-for-ingress-controller\n# Deploys Sequencer + local DA\njust deploy-astria-local\n")),(0,o.kt)("p",null,"This may take a minute or two if this the first time you are deploying as quite\na few containers need to be downloaded. Once the command completes, all elements\nof the dev-cluster will be up and running. This does not run a rollup, block\nexplorer, or faucet. "),(0,o.kt)("p",null,"Now that the sequencer and DA are running, the next step is to deploy a rollup."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.f58957ea.js b/assets/js/1df93b7f.3d74108f.js similarity index 87% rename from assets/js/1df93b7f.f58957ea.js rename to assets/js/1df93b7f.3d74108f.js index 34c0e4f..a7cecc7 100644 --- a/assets/js/1df93b7f.f58957ea.js +++ b/assets/js/1df93b7f.3d74108f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[237],{9217:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(7294);function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:n,...l}=e;return a.createElement("svg",r({width:100,height:100,viewBox:"0 0 100 100",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"featureSvg_GfXr","aria-labelledby":n},l))}},8391:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});var a=n(7294),r=n(6010),l=n(9960),s=n(2263),i=n(7961),o=n(7462);const c={features:"features_t9lD",featureSvg:"featureSvg_GfXr"},u=[{title:"Decentralized by Default",Svg:n(9217).Z,description:a.createElement(a.Fragment,null,"Share a single decentralized network of sequencers that's simple and permissionless to join.")},{title:"Cross-Rollup Composability",Svg:n(9217).Z,description:a.createElement(a.Fragment,null,"Astria enables atomic transaction inclusion across rollups via its native transaction bundles.")},{title:"Maintain Sovereignty",Svg:n(9217).Z,description:a.createElement(a.Fragment,null,"Rollups own their execution and state. Swapping out the sequencing layer is as simple as updating your Rollup software.")}];function m(e){let{title:t,Svg:n,description:l}=e;return a.createElement("div",{className:(0,r.Z)("col col--4")},a.createElement("div",{className:"text--center"},a.createElement(n,{className:c.featureSvg,role:"img"})),a.createElement("div",{className:"text--center padding-horiz--md"},a.createElement("h3",null,t),a.createElement("p",null,l)))}function d(){return a.createElement("section",{className:c.features},a.createElement("div",{className:"container"},a.createElement("div",{className:"row"},u.map(((e,t)=>a.createElement(m,(0,o.Z)({key:t},e)))))))}const p={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"};function g(){const{siteConfig:e}=(0,s.Z)();return a.createElement("header",{className:(0,r.Z)("hero hero--primary",p.heroBanner)},a.createElement("div",{className:"container"},a.createElement("h1",{className:"hero__title"},e.title),a.createElement("p",{className:"hero__subtitle"},e.tagline),a.createElement("div",{className:p.buttons},a.createElement(l.Z,{className:"button button--secondary button--lg",to:"/docs/overview-of-astria/introduction/"},"Learn more about Astria"))))}function f(){const{siteConfig:e}=(0,s.Z)();return a.createElement(i.Z,{description:"Homepage for Astria Docs"},a.createElement(g,null),a.createElement("main",null,a.createElement(d,null)))}}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[237],{9217:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(7294);function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:n,...l}=e;return a.createElement("svg",r({width:100,height:100,viewBox:"0 0 100 100",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"featureSvg_GfXr","aria-labelledby":n},l))}},8391:(e,t,n)=>{n.r(t),n.d(t,{default:()=>v});var a=n(7294),r=n(6010),l=n(9960),s=n(2263),i=n(7961),o=n(7462);const c={features:"features_t9lD",featureSvg:"featureSvg_GfXr"},u=[{title:"Decentralized by Default",Svg:n(9217).Z,description:a.createElement(a.Fragment,null,"Share a single decentralized network of sequencers that's simple and permissionless to join.")},{title:"Cross-Rollup Composability",Svg:n(9217).Z,description:a.createElement(a.Fragment,null,"Astria enables atomic transaction inclusion across rollups via its native transaction bundles.")},{title:"Maintain Sovereignty",Svg:n(9217).Z,description:a.createElement(a.Fragment,null,"Rollups own their execution and state. Swapping out the sequencing layer is as simple as updating your Rollup software.")}];function m(e){let{title:t,Svg:n,description:l}=e;return a.createElement("div",{className:(0,r.Z)("col col--4")},a.createElement("div",{className:"text--center"},a.createElement(n,{className:c.featureSvg,role:"img"})),a.createElement("div",{className:"text--center padding-horiz--md"},a.createElement("h3",null,t),a.createElement("p",null,l)))}function d(){return a.createElement("section",{className:c.features},a.createElement("div",{className:"container"},a.createElement("div",{className:"row"},u.map(((e,t)=>a.createElement(m,(0,o.Z)({key:t},e)))))))}const p={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"};function g(){const{siteConfig:e}=(0,s.Z)();return a.createElement("header",{className:(0,r.Z)("hero hero--primary",p.heroBanner)},a.createElement("div",{className:"container"},a.createElement("h1",{className:"hero__title"},e.title),a.createElement("p",{className:"hero__subtitle"},e.tagline),a.createElement("div",{className:p.buttons},a.createElement(l.Z,{className:"button button--secondary button--lg",to:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"Learn more about Astria"))))}function v(){const{siteConfig:e}=(0,s.Z)();return a.createElement(i.Z,{description:"Homepage for Astria Docs"},a.createElement(g,null),a.createElement("main",null,a.createElement(d,null)))}}}]); \ No newline at end of file diff --git a/assets/js/22085d9f.6536a8e8.js b/assets/js/22085d9f.6536a8e8.js new file mode 100644 index 0000000..c4a7192 --- /dev/null +++ b/assets/js/22085d9f.6536a8e8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[940],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),p=u(r),h=a,f=p["".concat(s,".").concat(h)]||p[h]||d[h]||o;return r?n.createElement(f,i(i({ref:t},l),{},{components:r})):n.createElement(f,i({ref:t},l))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=h;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[p]="string"==typeof e?e:a,i[1]=c;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:5},i="The Astria Sequencer",c={unversionedId:"overview-of-astria/architecture/the-astria-sequencer",id:"overview-of-astria/architecture/the-astria-sequencer",title:"The Astria Sequencer",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/architecture/5-the-astria-sequencer.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/the-astria-sequencer",permalink:"/docs/overview-of-astria/architecture/the-astria-sequencer",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/5-the-astria-sequencer.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"docsSidebar",previous:{title:"Composer",permalink:"/docs/overview-of-astria/architecture/composer"},next:{title:"Relayer",permalink:"/docs/overview-of-astria/architecture/relayer"}},s={},u=[],l={toc:u},p="wrapper";function d(e){let{components:t,...o}=e;return(0,a.kt)(p,(0,n.Z)({},l,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"the-astria-sequencer"},"The Astria Sequencer"),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,a.kt)("p",null,"The Astria Shared Sequencer is a decentralized network of nodes utilizing CometBFT that come to consensus on an ordered set of transactions (ie. it is a blockchain). The unique feature of the sequencer is that the transactions it includes are not executed (lazy sequencing), and are destined for another execution engine (ie. a rollup). This excludes \u201csequencer native\u201d transactions, such as transfers of tokens within the sequencer chain. Transactions from any given rollup are only ordered on the sequencer, not executed."),(0,a.kt)("p",null,"The sequencer can optionally act as a \u201cvalidator\u201d, meaning it actively\nparticipates in the production and finalization of new blocks."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Astria Shared Sequencer",src:r(49).Z,width:"3840",height:"2160"})),(0,a.kt)("p",null,"Components of note that are not shown in the above diagram are the ",(0,a.kt)("a",{parentName:"p",href:"/docs/overview-of-astria/architecture/composer"},"Composer"),",\n",(0,a.kt)("a",{parentName:"p",href:"/docs/overview-of-astria/architecture/relayer"},"Relayer"),", and ",(0,a.kt)("a",{parentName:"p",href:"/docs/overview-of-astria/architecture/conductor"},"Conductor"),". "),(0,a.kt)("p",null,"These components facilitate the delivery transactions,\nbatches, and different commits shown above, back to the users."),(0,a.kt)("p",null,"See the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main/crates/astria-sequencer"},"Sequencer code here.")))}d.isMDXComponent=!0},49:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/shared-sequencer-overview-9abb7d50085d058dd9d4740a7b85b61f.png"}}]); \ No newline at end of file diff --git a/assets/js/22085d9f.c20978a1.js b/assets/js/22085d9f.c20978a1.js deleted file mode 100644 index c266815..0000000 --- a/assets/js/22085d9f.c20978a1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[940],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),u=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=u(e.components);return n.createElement(c.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),d=u(r),h=a,f=d["".concat(c,".").concat(h)]||d[h]||p[h]||o;return r?n.createElement(f,i(i({ref:t},l),{},{components:r})):n.createElement(f,i({ref:t},l))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=h;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[d]="string"==typeof e?e:a,i[1]=s;for(var u=2;u{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:5},i="The Astria Sequencer",s={unversionedId:"overview-of-astria/architecture/the-astria-sequencer",id:"overview-of-astria/architecture/the-astria-sequencer",title:"The Astria Sequencer",description:"The Astria Shared Sequencer is a decentralized network of nodes utilizing CometBFT that come to consensus on an ordered set of transactions (ie. it is a blockchain). The unique feature of the sequencer is that the transactions it includes are not executed (lazy sequencing), and are destined for another execution engine (ie. a rollup). This excludes \u201csequencer native\u201d transactions, such as transfers of tokens within the sequencer chain. Transactions from any given rollup are only ordered on the sequencer, not executed.",source:"@site/docs/overview-of-astria/architecture/5-the-astria-sequencer.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/the-astria-sequencer",permalink:"/docs/overview-of-astria/architecture/the-astria-sequencer",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/5-the-astria-sequencer.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"docsSidebar",previous:{title:"Composer",permalink:"/docs/overview-of-astria/architecture/composer"},next:{title:"Relayer",permalink:"/docs/overview-of-astria/architecture/relayer"}},c={},u=[],l={toc:u},d="wrapper";function p(e){let{components:t,...o}=e;return(0,a.kt)(d,(0,n.Z)({},l,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"the-astria-sequencer"},"The Astria Sequencer"),(0,a.kt)("p",null,"The Astria Shared Sequencer is a decentralized network of nodes utilizing CometBFT that come to consensus on an ordered set of transactions (ie. it is a blockchain). The unique feature of the sequencer is that the transactions it includes are not executed (lazy sequencing), and are destined for another execution engine (ie. a rollup). This excludes \u201csequencer native\u201d transactions, such as transfers of tokens within the sequencer chain. Transactions from any given rollup are only ordered on the sequencer, not executed."),(0,a.kt)("p",null,"The sequencer can optionally act as a \u201cvalidator\u201d, meaning it actively\nparticipates in the production and finalization of new blocks."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Astria Shared Sequencer",src:r(49).Z,width:"3840",height:"2160"})),(0,a.kt)("p",null,"Components of note that are not shown in the above diagram are the ",(0,a.kt)("a",{parentName:"p",href:"/docs/overview-of-astria/architecture/composer"},"Composer"),",\n",(0,a.kt)("a",{parentName:"p",href:"/docs/overview-of-astria/architecture/relayer"},"Relayer"),", and ",(0,a.kt)("a",{parentName:"p",href:"/docs/overview-of-astria/architecture/conductor"},"Conductor"),". "),(0,a.kt)("p",null,"These components facilitate the delivery transactions,\nbatches, and different commits shown above, back to the users."),(0,a.kt)("p",null,"See the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main/crates/astria-sequencer"},"Sequencer code here.")))}p.isMDXComponent=!0},49:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/shared-sequencer-overview-9abb7d50085d058dd9d4740a7b85b61f.png"}}]); \ No newline at end of file diff --git a/assets/js/25349772.937b5d8c.js b/assets/js/25349772.937b5d8c.js new file mode 100644 index 0000000..3ec1526 --- /dev/null +++ b/assets/js/25349772.937b5d8c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[28],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>y});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function a(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),c=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),f=n,y=u["".concat(l,".").concat(f)]||u[f]||d[f]||i;return r?o.createElement(y,a(a({ref:t},p),{},{components:r})):o.createElement(y,a({ref:t},p))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,a=new Array(i);a[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,a[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var o=r(7462),n=(r(7294),r(3905));const i={sidebar_position:3},a="Cross-Rollup Composability",s={unversionedId:"overview-of-astria/cross-rollup-composability",id:"overview-of-astria/cross-rollup-composability",title:"Cross-Rollup Composability",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/3-cross-rollup-composability.md",sourceDirName:"overview-of-astria",slug:"/overview-of-astria/cross-rollup-composability",permalink:"/docs/overview-of-astria/cross-rollup-composability",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/3-cross-rollup-composability.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docsSidebar",previous:{title:"Why Decentralized Sequencers?",permalink:"/docs/overview-of-astria/why-decentralized-sequencers"},next:{title:"Maintain Sovereignty",permalink:"/docs/overview-of-astria/maintain-sovereignty"}},l={},c=[],p={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"cross-rollup-composability"},"Cross-Rollup Composability"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,n.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,n.kt)("p",null,"Because Astria handles the transaction ordering for multiple rollups, it\u2019s able to provide guarantees that transactions are only included as part of an atomic bundle. This allows users to specify that a transaction on Rollup A can be included in a block if and only if a different transaction on Rollup B is also included in the same block. By enabling such conditional transaction inclusion, Astria unlocks exciting possibilities such as atomic cross-rollup arbitrage."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/25349772.94053caf.js b/assets/js/25349772.94053caf.js deleted file mode 100644 index 6129040..0000000 --- a/assets/js/25349772.94053caf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[28],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function a(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),c=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),f=n,b=u["".concat(l,".").concat(f)]||u[f]||d[f]||i;return r?o.createElement(b,a(a({ref:t},p),{},{components:r})):o.createElement(b,a({ref:t},p))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,a=new Array(i);a[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,a[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var o=r(7462),n=(r(7294),r(3905));const i={sidebar_position:3},a="Croll-Rollup Composability",s={unversionedId:"overview-of-astria/cross-rollup-composability",id:"overview-of-astria/cross-rollup-composability",title:"Croll-Rollup Composability",description:"Because Astria handles the transaction ordering for multiple rollups, it\u2019s able to provide guarantees that transactions are only included as part of an atomic bundle. This allows users to specify that a transaction on Rollup A can be included in a block if and only if a different transaction on Rollup B is also included in the same block. By enabling such conditional transaction inclusion, Astria unlocks exciting possibilities such as atomic cross-rollup arbitrage.",source:"@site/docs/overview-of-astria/3-cross-rollup-composability.md",sourceDirName:"overview-of-astria",slug:"/overview-of-astria/cross-rollup-composability",permalink:"/docs/overview-of-astria/cross-rollup-composability",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/3-cross-rollup-composability.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docsSidebar",previous:{title:"Why Decentralized Sequencers?",permalink:"/docs/overview-of-astria/why-decentralized-sequencers"},next:{title:"Maintain Sovereignty",permalink:"/docs/overview-of-astria/maintain-sovereignty"}},l={},c=[],p={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"croll-rollup-composability"},"Croll-Rollup Composability"),(0,n.kt)("p",null,"Because Astria handles the transaction ordering for multiple rollups, it\u2019s able to provide guarantees that transactions are only included as part of an atomic bundle. This allows users to specify that a transaction on Rollup A can be included in a block if and only if a different transaction on Rollup B is also included in the same block. By enabling such conditional transaction inclusion, Astria unlocks exciting possibilities such as atomic cross-rollup arbitrage."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/28ec242d.01e9bada.js b/assets/js/28ec242d.01e9bada.js deleted file mode 100644 index d12e209..0000000 --- a/assets/js/28ec242d.01e9bada.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[241],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(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 a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},v=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(r),v=o,f=p["".concat(l,".").concat(v)]||p[v]||d[v]||s;return r?n.createElement(f,a(a({ref:t},u),{},{components:r})):n.createElement(f,a({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=r.length,a=new Array(s);a[0]=v;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[p]="string"==typeof e?e:o,a[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const s={sidebar_position:1},a="Dev-Cluster Overview",i={unversionedId:"dev-cluster/overview",id:"dev-cluster/overview",title:"Dev-Cluster Overview",description:"Astria's Shared Sequencer Network allows multiple rollups to share a single decentralized network of sequencers that\u2019s permissionless to join. This shared sequencer network provides out-of-the-box censorship resistance, fast block confirmations, and atomic cross-rollup inclusion guarantees.",source:"@site/docs/dev-cluster/1-overview.md",sourceDirName:"dev-cluster",slug:"/dev-cluster/overview",permalink:"/docs/dev-cluster/overview",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/dev-cluster/1-overview.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docsSidebar",previous:{title:"Data Availability Layer",permalink:"/docs/overview-of-astria/architecture/data-availability-layer"},next:{title:"Running the Dev Cluster Locally",permalink:"/docs/dev-cluster/run-dev-cluster-locally"}},l={},c=[],u={toc:c},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"dev-cluster-overview"},"Dev-Cluster Overview"),(0,o.kt)("p",null,"Astria's Shared Sequencer Network allows multiple rollups to share a single decentralized network of sequencers that\u2019s permissionless to join. This shared sequencer network provides out-of-the-box censorship resistance, fast block confirmations, and atomic cross-rollup inclusion guarantees."),(0,o.kt)("p",null,"The Astria ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"dev-cluster")," is the\ncollective stack of all of Astria's components packaged together using\nKubernetes. While we generally refer to Astria as the network of shared\nsequencers, we provide several other components to make it simpler to integrate\nwith the shared sequencer network. The dev-cluster is provided to make\ndeveloping and testing the Astria network, as well as integrations with Astria,\nas simple as possible."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"The primary use of the dev-cluster is running the full stack completely locally.\nThere are elements of it that are used for running a local rollup that connects\nto the remote dev-net, but those will be ",(0,o.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment/"},"discussed in another\nsection"),".")),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"dev-cluster repo here.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/28ec242d.4b6eccd7.js b/assets/js/28ec242d.4b6eccd7.js new file mode 100644 index 0000000..b60975c --- /dev/null +++ b/assets/js/28ec242d.4b6eccd7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[241],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=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=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},v=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(r),v=o,m=p["".concat(l,".").concat(v)]||p[v]||d[v]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=v;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:1},i="Dev-Cluster Overview",s={unversionedId:"dev-cluster/overview",id:"dev-cluster/overview",title:"Dev-Cluster Overview",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/dev-cluster/1-overview.md",sourceDirName:"dev-cluster",slug:"/dev-cluster/overview",permalink:"/docs/dev-cluster/overview",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/dev-cluster/1-overview.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docsSidebar",previous:{title:"Data Availability Layer",permalink:"/docs/overview-of-astria/architecture/data-availability-layer"},next:{title:"Running the Dev Cluster Locally",permalink:"/docs/dev-cluster/run-dev-cluster-locally"}},l={},c=[],u={toc:c},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"dev-cluster-overview"},"Dev-Cluster Overview"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,o.kt)("p",null,"Astria's Shared Sequencer Network allows multiple rollups to share a single decentralized network of sequencers that\u2019s permissionless to join. This shared sequencer network provides out-of-the-box censorship resistance, fast block confirmations, and atomic cross-rollup inclusion guarantees."),(0,o.kt)("p",null,"The Astria ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"dev-cluster")," is the\ncollective stack of all of Astria's components packaged together using\nKubernetes. While we generally refer to Astria as the network of shared\nsequencers, we provide several other components to make it simpler to integrate\nwith the shared sequencer network. The dev-cluster is provided to make\ndeveloping and testing the Astria network, as well as integrations with Astria,\nas simple as possible."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"The primary use of the dev-cluster is running the full stack completely locally.\nThere are elements of it that are used for running a local rollup that connects\nto the remote dev-net, but those will be ",(0,o.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment/"},"discussed in another\nsection"),".")),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"dev-cluster repo here.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/33cb50ef.fcedec04.js b/assets/js/33cb50ef.ee02b9b4.js similarity index 60% rename from assets/js/33cb50ef.fcedec04.js rename to assets/js/33cb50ef.ee02b9b4.js index be5af9c..2794ed1 100644 --- a/assets/js/33cb50ef.fcedec04.js +++ b/assets/js/33cb50ef.ee02b9b4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[309],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},v=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),v=o,d=u["".concat(c,".").concat(v)]||u[v]||f[v]||i;return r?n.createElement(d,a(a({ref:t},p),{},{components:r})):n.createElement(d,a({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=v;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:o,a[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={sidebar_position:4},a="Maintain Sovereignty",s={unversionedId:"overview-of-astria/maintain-sovereignty",id:"overview-of-astria/maintain-sovereignty",title:"Maintain Sovereignty",description:"Sovereignty is important, so rollups must be able to receive the benefits of",source:"@site/docs/overview-of-astria/4-maintain-sovereignty.md",sourceDirName:"overview-of-astria",slug:"/overview-of-astria/maintain-sovereignty",permalink:"/docs/overview-of-astria/maintain-sovereignty",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/4-maintain-sovereignty.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"docsSidebar",previous:{title:"Croll-Rollup Composability",permalink:"/docs/overview-of-astria/cross-rollup-composability"},next:{title:"Architecture Overview",permalink:"/docs/overview-of-astria/architecture/overview"}},c={},l=[],p={toc:l},u="wrapper";function f(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"maintain-sovereignty"},"Maintain Sovereignty"),(0,o.kt)("p",null,"Sovereignty is important, so rollups must be able to receive the benefits of\nAstria without fear of being locked in. That\u2019s why swapping out the sequencing\nlayer is as simple as updating a rollup node\u2019s software to use a different fork\nchoice rule at a chosen block height. Transaction data is stored on the base\nlayer (eg. Celestia), and rollup full nodes hold the state and perform\nexecution, this means there\u2019s nothing that Astria can do to hold the rollup\nhostage."))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[309],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>v});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),d=o,v=u["".concat(c,".").concat(d)]||u[d]||f[d]||i;return r?n.createElement(v,a(a({ref:t},p),{},{components:r})):n.createElement(v,a({ref:t},p))}));function v(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=d;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:o,a[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={sidebar_position:4},a="Maintain Sovereignty",s={unversionedId:"overview-of-astria/maintain-sovereignty",id:"overview-of-astria/maintain-sovereignty",title:"Maintain Sovereignty",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/4-maintain-sovereignty.md",sourceDirName:"overview-of-astria",slug:"/overview-of-astria/maintain-sovereignty",permalink:"/docs/overview-of-astria/maintain-sovereignty",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/4-maintain-sovereignty.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"docsSidebar",previous:{title:"Cross-Rollup Composability",permalink:"/docs/overview-of-astria/cross-rollup-composability"},next:{title:"Architecture Overview",permalink:"/docs/overview-of-astria/architecture/overview"}},c={},l=[],p={toc:l},u="wrapper";function f(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"maintain-sovereignty"},"Maintain Sovereignty"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,o.kt)("p",null,"Sovereignty is important, so rollups must be able to receive the benefits of\nAstria without fear of being locked in. That\u2019s why swapping out the sequencing\nlayer is as simple as updating a rollup node\u2019s software to use a different fork\nchoice rule at a chosen block height. Transaction data is stored on the base\nlayer (eg. Celestia), and rollup full nodes hold the state and perform\nexecution, this means there\u2019s nothing that Astria can do to hold the rollup\nhostage."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3756debb.67e3da62.js b/assets/js/3756debb.67e3da62.js new file mode 100644 index 0000000..8279258 --- /dev/null +++ b/assets/js/3756debb.67e3da62.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[110],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>y});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=l(r),f=o,y=u["".concat(c,".").concat(f)]||u[f]||p[f]||a;return r?n.createElement(y,i(i({ref:t},d),{},{components:r})):n.createElement(y,i({ref:t},d))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:2},i="Why Decentralized Sequencers?",s={unversionedId:"overview-of-astria/why-decentralized-sequencers",id:"overview-of-astria/why-decentralized-sequencers",title:"Why Decentralized Sequencers?",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/2-why-decentralized-sequencers.md",sourceDirName:"overview-of-astria",slug:"/overview-of-astria/why-decentralized-sequencers",permalink:"/docs/overview-of-astria/why-decentralized-sequencers",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/2-why-decentralized-sequencers.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docsSidebar",previous:{title:"Introduction",permalink:"/docs/overview-of-astria/introduction"},next:{title:"Cross-Rollup Composability",permalink:"/docs/overview-of-astria/cross-rollup-composability"}},c={},l=[],d={toc:l},u="wrapper";function p(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"why-decentralized-sequencers"},"Why Decentralized Sequencers?"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,o.kt)("p",null,"Centralization is antithetical to crypto. And yet, today\u2019s rollups almost universally depend on a single sequencer. Centralized sequencers provide fast transaction confirmations and reduce costs by batching and compressing transactions. However, these benefits come at the cost of relying on a single trusted actor for liveness and censorship resistance."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Sacrificing decentralization for an improved user experience is an unacceptable Faustian bargain.")),(0,o.kt)("p",null,"Astria tackles centralization head-on, providing rollups with a decentralized sequencer and even better UX. Astria\u2019s shared sequencer network is a middleware blockchain with its own decentralized sequencer set which accepts transactions from multiple rollups. These transactions are ordered into a single block and written to the base layer without executing them."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Shared Sequencers",src:r(154).Z,width:"3840",height:"2160"})))}p.isMDXComponent=!0},154:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/shared_sequencer-aef561d11f236d4ade5df4e6b7bcadcf.png"}}]); \ No newline at end of file diff --git a/assets/js/3756debb.84a4eb0a.js b/assets/js/3756debb.84a4eb0a.js deleted file mode 100644 index 5684b9f..0000000 --- a/assets/js/3756debb.84a4eb0a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[110],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>y});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=l(r),f=a,y=u["".concat(c,".").concat(f)]||u[f]||p[f]||o;return r?n.createElement(y,i(i({ref:t},d),{},{components:r})):n.createElement(y,i({ref:t},d))}));function y(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:2},i="Why Decentralized Sequencers?",s={unversionedId:"overview-of-astria/why-decentralized-sequencers",id:"overview-of-astria/why-decentralized-sequencers",title:"Why Decentralized Sequencers?",description:"Centralization is antithetical to crypto. And yet, today\u2019s rollups almost universally depend on a single sequencer. Centralized sequencers provide fast transaction confirmations and reduce costs by batching and compressing transactions. However, these benefits come at the cost of relying on a single trusted actor for liveness and censorship resistance.",source:"@site/docs/overview-of-astria/2-why-decentralized-sequencers.md",sourceDirName:"overview-of-astria",slug:"/overview-of-astria/why-decentralized-sequencers",permalink:"/docs/overview-of-astria/why-decentralized-sequencers",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/2-why-decentralized-sequencers.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docsSidebar",previous:{title:"Introduction",permalink:"/docs/overview-of-astria/introduction"},next:{title:"Croll-Rollup Composability",permalink:"/docs/overview-of-astria/cross-rollup-composability"}},c={},l=[],d={toc:l},u="wrapper";function p(e){let{components:t,...o}=e;return(0,a.kt)(u,(0,n.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"why-decentralized-sequencers"},"Why Decentralized Sequencers?"),(0,a.kt)("p",null,"Centralization is antithetical to crypto. And yet, today\u2019s rollups almost universally depend on a single sequencer. Centralized sequencers provide fast transaction confirmations and reduce costs by batching and compressing transactions. However, these benefits come at the cost of relying on a single trusted actor for liveness and censorship resistance."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Sacrificing decentralization for an improved user experience is an unacceptable Faustian bargain.")),(0,a.kt)("p",null,"Astria tackles centralization head-on, providing rollups with a decentralized sequencer and even better UX. Astria\u2019s shared sequencer network is a middleware blockchain with its own decentralized sequencer set which accepts transactions from multiple rollups. These transactions are ordered into a single block and written to the base layer without executing them."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Shared Sequencers",src:r(154).Z,width:"3840",height:"2160"})))}p.isMDXComponent=!0},154:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/shared_sequencer-aef561d11f236d4ade5df4e6b7bcadcf.png"}}]); \ No newline at end of file diff --git a/assets/js/39034b90.21c243b8.js b/assets/js/39034b90.21c243b8.js deleted file mode 100644 index 316a790..0000000 --- a/assets/js/39034b90.21c243b8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[823],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),c=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),d=n,m=u["".concat(l,".").concat(d)]||u[d]||f[d]||a;return r?o.createElement(m,i(i({ref:t},p),{},{components:r})):o.createElement(m,i({ref:t},p))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:3},i="Rollups",s={unversionedId:"overview-of-astria/architecture/rollup",id:"overview-of-astria/architecture/rollup",title:"Rollups",description:"Astria is designed for permissionless rollup integration and takes advantage of lazy shared sequencing. This means that rollup developers have total sovereignty over their own execution state and can swap out sequencing layers without fear of being locked in. You do not need to ask for permission or go through a governance process to gain access. A rollup simply needs to satisfy the following interfaces:",source:"@site/docs/overview-of-astria/architecture/3-rollup.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/rollup",permalink:"/docs/overview-of-astria/architecture/rollup",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/3-rollup.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docsSidebar",previous:{title:"Transaction Flow",permalink:"/docs/overview-of-astria/architecture/transaction-flow"},next:{title:"Composer",permalink:"/docs/overview-of-astria/architecture/composer"}},l={},c=[],p={toc:c},u="wrapper";function f(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"rollups"},"Rollups"),(0,n.kt)("p",null,"Astria is designed for permissionless rollup integration and takes advantage of ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Lazy_evaluation?ref=blog.astria.org"},"lazy")," shared sequencing. This means that rollup developers have total sovereignty over their own execution state and can swap out sequencing layers without fear of being locked in. You do not need to ask for permission or go through a governance process to gain access. A rollup simply needs to satisfy the following interfaces:"),(0,n.kt)("p",null,"Write Interface (Rollup <-> Composer):"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"For transaction submissions.")),(0,n.kt)("p",null,"Read Interface (Rollup <-> Conductor):"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"For receiving blocks from the shared sequencer network.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Single Rollup",src:r(1812).Z,width:"1915",height:"2076"})),(0,n.kt)("p",null,"The Composer and Conductor are explained in more detail in future sections."),(0,n.kt)("p",null,"Both composer and conductor expose ",(0,n.kt)("a",{parentName:"p",href:"https://grpc.io/"},"gRPC")," interfaces. See the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main/crates/astria-proto"},"astria-protos")," repo for specific implementation details."),(0,n.kt)("p",null,"Astria currently deploys a fork of\n",(0,n.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/go-ethereum"},"Geth")," as an EVM rollup."))}f.isMDXComponent=!0},1812:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/single-rollup-247d65cd6c1b0e25469bb0499d973fc0.png"}}]); \ No newline at end of file diff --git a/assets/js/39034b90.77c02f97.js b/assets/js/39034b90.77c02f97.js new file mode 100644 index 0000000..942dbc0 --- /dev/null +++ b/assets/js/39034b90.77c02f97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[823],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),c=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),d=n,m=u["".concat(l,".").concat(d)]||u[d]||f[d]||a;return r?o.createElement(m,i(i({ref:t},p),{},{components:r})):o.createElement(m,i({ref:t},p))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:3},i="Rollups",s={unversionedId:"overview-of-astria/architecture/rollup",id:"overview-of-astria/architecture/rollup",title:"Rollups",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/architecture/3-rollup.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/rollup",permalink:"/docs/overview-of-astria/architecture/rollup",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/3-rollup.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docsSidebar",previous:{title:"Transaction Flow",permalink:"/docs/overview-of-astria/architecture/transaction-flow"},next:{title:"Composer",permalink:"/docs/overview-of-astria/architecture/composer"}},l={},c=[],p={toc:c},u="wrapper";function f(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"rollups"},"Rollups"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,n.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,n.kt)("p",null,"Astria is designed for permissionless rollup integration and takes advantage of ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Lazy_evaluation?ref=blog.astria.org"},"lazy")," shared sequencing. This means that rollup developers have total sovereignty over their own execution state and can swap out sequencing layers without fear of being locked in. You do not need to ask for permission or go through a governance process to gain access. A rollup simply needs to satisfy the following interfaces:"),(0,n.kt)("p",null,"Write Interface (Rollup <-> Composer):"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"For transaction submissions.")),(0,n.kt)("p",null,"Read Interface (Rollup <-> Conductor):"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"For receiving blocks from the shared sequencer network.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Single Rollup",src:r(1812).Z,width:"1915",height:"2076"})),(0,n.kt)("p",null,"The Composer and Conductor are explained in more detail in future sections."),(0,n.kt)("p",null,"Both composer and conductor expose ",(0,n.kt)("a",{parentName:"p",href:"https://grpc.io/"},"gRPC")," interfaces. See the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main/crates/astria-proto"},"astria-protos")," repo for specific implementation details."),(0,n.kt)("p",null,"Astria currently deploys a fork of\n",(0,n.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/go-ethereum"},"Geth")," as an EVM rollup."))}f.isMDXComponent=!0},1812:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/single-rollup-247d65cd6c1b0e25469bb0499d973fc0.png"}}]); \ No newline at end of file diff --git a/assets/js/3c203bfa.4aeccd4f.js b/assets/js/3c203bfa.4aeccd4f.js new file mode 100644 index 0000000..985f4b8 --- /dev/null +++ b/assets/js/3c203bfa.4aeccd4f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[792],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},k=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(n),k=r,m=p["".concat(s,".").concat(k)]||p[k]||d[k]||l;return n?a.createElement(m,o(o({ref:t},c),{},{components:n})):a.createElement(m,o({ref:t},c))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:r,o[1]=i;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>u});var a=n(7462),r=(n(7294),n(3905));const l={sidebar_position:4},o="Remote Rollup Deployment",i={unversionedId:"running-a-rollup-on-astria-dusknet/remote-rollup-deployment",id:"running-a-rollup-on-astria-dusknet/remote-rollup-deployment",title:"Remote Rollup Deployment",description:"The following assumes you are using [Digital Ocean Kubernetes",source:"@site/docs/running-a-rollup-on-astria-dusknet/4-remote-rollup-deployment.md",sourceDirName:"running-a-rollup-on-astria-dusknet",slug:"/running-a-rollup-on-astria-dusknet/remote-rollup-deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/remote-rollup-deployment",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/running-a-rollup-on-astria-dusknet/4-remote-rollup-deployment.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"docsSidebar",previous:{title:"Local Rollup Deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment"},next:{title:"Introduction",permalink:"/docs/overview-of-astria/introduction"}},s={},u=[{value:"Manually Setup Digital Ocean Ingress",id:"manually-setup-digital-ocean-ingress",level:2},{value:"Watching Ingress Deployment",id:"watching-ingress-deployment",level:2},{value:"Digital Ocean Loadbalancer",id:"digital-ocean-loadbalancer",level:2},{value:"Endpoints",id:"endpoints",level:2},{value:"Update the helm Chart",id:"update-the-helm-chart",level:2},{value:"Creating your own Genesis Account",id:"creating-your-own-genesis-account",level:2},{value:"Get and Build the astria-cli",id:"get-and-build-the-astria-cli",level:2},{value:"Using the astria-cli",id:"using-the-astria-cli",level:2},{value:"Get Current Sequencer Block Height",id:"get-current-sequencer-block-height",level:3},{value:"Environment Variables + cli",id:"environment-variables--cli",level:2},{value:"Create new sequencer account",id:"create-new-sequencer-account",level:2},{value:"Use locally modified chart",id:"use-locally-modified-chart",level:2},{value:"Deploy the Rollup Node",id:"deploy-the-rollup-node",level:2},{value:"Delete Rollup Node",id:"delete-rollup-node",level:2},{value:"Default to astria-dev-cluster namespace",id:"default-to-astria-dev-cluster-namespace",level:2},{value:"Watch for pod startup",id:"watch-for-pod-startup",level:2},{value:"Check Block Retrieval on the Conductor",id:"check-block-retrieval-on-the-conductor",level:2},{value:"Observe your Deployment",id:"observe-your-deployment",level:2},{value:"Debug Ingress",id:"debug-ingress",level:2},{value:"Use cast to Interact with your Rollup",id:"use-cast-to-interact-with-your-rollup",level:2},{value:"Fund you Sequencer Account",id:"fund-you-sequencer-account",level:2}],c={toc:u},p="wrapper";function d(e){let{components:t,...l}=e;return(0,r.kt)(p,(0,a.Z)({},c,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"remote-rollup-deployment"},"Remote Rollup Deployment"),(0,r.kt)("p",null,"The following assumes you are using ",(0,r.kt)("a",{parentName:"p",href:"https://www.digitalocean.com/products/kubernetes"},"Digital Ocean Kubernetes\n(DOKS)"),"."),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"You must use at least a 2 node cluster.")),(0,r.kt)("h2",{id:"manually-setup-digital-ocean-ingress"},"Manually Setup Digital Ocean Ingress"),(0,r.kt)("p",null,"Follow the steps here to setup the nginx ingress controller:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://marketplace.digitalocean.com/apps/nginx-ingress-controller"},"https://marketplace.digitalocean.com/apps/nginx-ingress-controller"))),(0,r.kt)("p",null,"Follow the steps here to add your own domain:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.digitalocean.com/products/networking/dns/getting-started/dns-registrars/"},"https://docs.digitalocean.com/products/networking/dns/getting-started/dns-registrars/")),(0,r.kt)("li",{parentName:"ul"},"This is where you will set ",(0,r.kt)("inlineCode",{parentName:"li"},""))),(0,r.kt)("p",null,"Follow the steps here to set up an ",(0,r.kt)("inlineCode",{parentName:"p"},"A")," record for DNS:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.digitalocean.com/products/networking/dns/how-to/manage-records/#a-records"},"https://docs.digitalocean.com/products/networking/dns/how-to/manage-records/#a-records"))),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"When configure=ing the ",(0,r.kt)("inlineCode",{parentName:"p"},"A")," record for DNS, the ",(0,r.kt)("inlineCode",{parentName:"p"},"directs to")," value should specify the ",(0,r.kt)("inlineCode",{parentName:"p"},"loadbalancer")," which was created for the ",(0,r.kt)("inlineCode",{parentName:"p"},"nginx-ingress-controller")," using the console. ")),(0,r.kt)("h2",{id:"watching-ingress-deployment"},"Watching Ingress Deployment"),(0,r.kt)("p",null,"Look for ",(0,r.kt)("inlineCode",{parentName:"p"},"ingress-nginx")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get ns -w\n")),(0,r.kt)("p",null,"Look for two pods starting with ",(0,r.kt)("inlineCode",{parentName:"p"},"ingress-nginx-controller")," in STATUS ",(0,r.kt)("inlineCode",{parentName:"p"},"Running")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n ingress-nginx -w\n")),(0,r.kt)("h2",{id:"digital-ocean-loadbalancer"},"Digital Ocean Loadbalancer"),(0,r.kt)("p",null,"Look for a new loadbalancer being created:\n",(0,r.kt)("a",{parentName:"p",href:"https://cloud.digitalocean.com/networking/load_balancers"},"https://cloud.digitalocean.com/networking/load_balancers")),(0,r.kt)("h2",{id:"endpoints"},"Endpoints"),(0,r.kt)("p",null,"Endpoints for the remote cluster are the following:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"NAME (as helm creates)"),(0,r.kt)("th",{parentName:"tr",align:null},"HOSTS"),(0,r.kt)("th",{parentName:"tr",align:null},"ADDRESS"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"astria-ingress"),(0,r.kt)("td",{parentName:"tr",align:null},"rpc.evm.dusk-1.devnet.astria.org"),(0,r.kt)("td",{parentName:"tr",align:null},"34.160.214.22")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"blockscout-ingress"),(0,r.kt)("td",{parentName:"tr",align:null},"explorer.evm.dusk-1.devnet.astria.org"),(0,r.kt)("td",{parentName:"tr",align:null},"34.111.167.16")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"faucet-ingress"),(0,r.kt)("td",{parentName:"tr",align:null},"faucet.evm.dusk-1.devnet.astria.org"),(0,r.kt)("td",{parentName:"tr",align:null},"130.211.4.120")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"sequencer-faucet"),(0,r.kt)("td",{parentName:"tr",align:null},"faucet.sequencer.dusk-1.devnet.astria.org"),(0,r.kt)("td",{parentName:"tr",align:null},"34.36.8.102")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"sequencer-ingress"),(0,r.kt)("td",{parentName:"tr",align:null},"rpc.sequencer.dusk-1.devnet.astria.org"),(0,r.kt)("td",{parentName:"tr",align:null},"34.111.73.187")))),(0,r.kt)("h2",{id:"update-the-helm-chart"},"Update the ",(0,r.kt)("inlineCode",{parentName:"h2"},"helm")," Chart"),(0,r.kt)("p",null,"Pull the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"Astria dev-cluster repo"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:astriaorg/dev-cluster.git\ncd dev-cluster\n")),(0,r.kt)("p",null,"Within the dev-cluster repo, update the ingress template ",(0,r.kt)("inlineCode",{parentName:"p"},"chart/rollup/templates/ingress.yaml")," so that each hostname ends in ",(0,r.kt)("inlineCode",{parentName:"p"},"")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"localdev.me")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"...\n- host: executor.{{ .Values.config.rollup.name }}.\n...\n- host: ws-executor.{{ .Values.config.rollup.name }}.\n...\n- host: faucet.{{ .Values.config.rollup.name }}.\n...\n- host: blockscout.{{ .Values.config.rollup.name }}.\n...\n")),(0,r.kt)("p",null,"Add an IngressClass so that the ",(0,r.kt)("inlineCode",{parentName:"p"},"metadata")," section in the same file looks like:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"metadata:\n name: {{ .Values.config.rollup.name }}-ingress\n namespace: {{ .Values.namespace }}\n annotations:\n kubernetes.io/ingress.class: nginx\n")),(0,r.kt)("h2",{id:"creating-your-own-genesis-account"},"Creating your own Genesis Account"),(0,r.kt)("p",null,"You can add genesis account(s) to your rollup during configuration."),(0,r.kt)("p",null,"You can create an account using"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast w new\n")),(0,r.kt)("p",null,"to create a new account:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Successfully created new keypair.\nAddress: 0xfFe9...5f8b # \nPrivate key: 0x332e...a8fb # \n")),(0,r.kt)("p",null,"You can then ",(0,r.kt)("inlineCode",{parentName:"p"},"export")," the genesis accounts like so:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_GENESIS_ACCOUNTS=:100000000000000000000\n")),(0,r.kt)("p",null,"Set ",(0,r.kt)("inlineCode",{parentName:"p"},"")," to the address printed out from the new command, and\n",(0,r.kt)("inlineCode",{parentName:"p"},"export")," the private key to the env vars using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_FAUCET_PRIV_KEY=\n")),(0,r.kt)("p",null,"Exporting the genesis account(s) is also shown in the export block in the next section."),(0,r.kt)("admonition",{type:"danger"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"NEVER")," use a private key you use on a live network. "),(0,r.kt)("p",{parentName:"admonition"},"For ease of use we recommend you set this to an key which you have access to")),(0,r.kt)("h2",{id:"get-and-build-the-astria-cli"},"Get and Build the ",(0,r.kt)("inlineCode",{parentName:"h2"},"astria-cli")),(0,r.kt)("p",null,"Pull the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria"},"Astria repo"),"."),(0,r.kt)("p",null,"Build the ",(0,r.kt)("inlineCode",{parentName:"p"},"astria-cli")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:astriaorg/astria.git\ncd astria\njust install-cli\n")),(0,r.kt)("p",null,"Keep track of this block height as it will be used for making the rollup config\nlater on. You will use this printed height in place of\n",(0,r.kt)("inlineCode",{parentName:"p"},"")," in the steps below."),(0,r.kt)("h2",{id:"using-the-astria-cli"},"Using the ",(0,r.kt)("inlineCode",{parentName:"h2"},"astria-cli")),(0,r.kt)("h3",{id:"get-current-sequencer-block-height"},"Get Current Sequencer Block Height"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"astria-cli sequencer blockheight get \\\n --sequencer-url https://rpc.sequencer.dusk-1.devnet.astria.org/\n")),(0,r.kt)("p",null,"Save the returned value for later. You will replace the\n",(0,r.kt)("inlineCode",{parentName:"p"},"")," tag in the following sections with this\nvalue."),(0,r.kt)("p",null,"Replace the tags in the commands and env vars below, as follows:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Var Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Var Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"")),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"The name of your rollup")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"")),(0,r.kt)("td",{parentName:"tr",align:null},"u64"),(0,r.kt)("td",{parentName:"tr",align:null},"The id of your network")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"")),(0,r.kt)("td",{parentName:"tr",align:null},"u64"),(0,r.kt)("td",{parentName:"tr",align:null},"The height of the sequencer (found above)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"")),(0,r.kt)("td",{parentName:"tr",align:null},"[u8; 40]"),(0,r.kt)("td",{parentName:"tr",align:null},"A wallet address")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"")),(0,r.kt)("td",{parentName:"tr",align:null},"u64"),(0,r.kt)("td",{parentName:"tr",align:null},"A balance. It is useful to make this a large value.")))),(0,r.kt)("h2",{id:"environment-variables--cli"},"Environment Variables + cli"),(0,r.kt)("p",null,"You can use environment variables to set the configuration for the rollup\nconfig creation. Replace all the ",(0,r.kt)("inlineCode",{parentName:"p"},"<>")," tags with their corresponding values. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_USE_TTY=true\nexport ROLLUP_LOG_LEVEL=DEBUG\nexport ROLLUP_NAME=\nexport ROLLUP_NETWORK_ID=\nexport ROLLUP_SKIP_EMPTY_BLOCKS=false\nexport ROLLUP_GENESIS_ACCOUNTS=:\nexport ROLLUP_SEQUENCER_INITIAL_BLOCK_HEIGHT=\nexport ROLLUP_SEQUENCER_WEBSOCKET=wss://rpc.sequencer.dusk-1.devnet.astria.org/websocket\nexport ROLLUP_SEQUENCER_RPC=https://rpc.sequencer.dusk-1.devnet.astria.org\n")),(0,r.kt)("p",null,"Then just run the config create command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"astria-cli rollup config create\n")),(0,r.kt)("p",null,"You can then run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"cat -rollup-conf.yaml\n")),(0,r.kt)("p",null,"to print out the config file contents to double check everything:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"config:\n useTTY: true\n logLevel: DEBUG\n rollup:\n name: \n chainId: # derived from rollup name\n networkId: \n skipEmptyBlocks: true\n genesisAccounts: \n - address: 0x\n balance: ''\n sequencer:\n initialBlockHeight: \n websocket: ws://rpc.sequencer.dusk-1.devnet.astria.org/websocket\n rpc: http://rpc.sequencer.dusk-1.devnet.astria.org\n celestia:\n fullNodeUrl: http://celestia-service:26658\n")),(0,r.kt)("p",null,"Export this file to the env vars as follows:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_CONF_FILE=-rollup-conf.yaml\n")),(0,r.kt)("h2",{id:"create-new-sequencer-account"},"Create new sequencer account"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"astria-cli sequencer account create\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Create Sequencer Account\n\nPrivate Key: "5562...1622" # \nPublic Key: "ec20...f613" # \nAddress: "8a2f...5f68"\n')),(0,r.kt)("p",null,"Keep track of the ",(0,r.kt)("inlineCode",{parentName:"p"},"")," as it will be used with the\nFaucet later on for funding your sequencer account."),(0,r.kt)("p",null,"Export your sequencer private key as an environment variable."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export SEQUENCER_PRIV_KEY=9c78...710d\n")),(0,r.kt)("h2",{id:"use-locally-modified-chart"},"Use locally modified chart"),(0,r.kt)("p",null,"Because you needed to modify the host names inside your ingress template you must deploy your rollup using your local chart:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'export ROLLUP_CHART_PATH="/your_path_to/dev-cluster/charts/rollup"\n')),(0,r.kt)("h2",{id:"deploy-the-rollup-node"},"Deploy the Rollup Node"),(0,r.kt)("p",null,"Use the ",(0,r.kt)("inlineCode",{parentName:"p"},"astria-cli")," to deploy the node."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"astria-cli rollup deployment create \\\n --config $ROLLUP_CONF_FILE \\\n --faucet-private-key $ROLLUP_FAUCET_PRIV_KEY \\\n --sequencer-private-key $SEQUENCER_PRIV_KEY\n")),(0,r.kt)("h2",{id:"delete-rollup-node"},"Delete Rollup Node"),(0,r.kt)("p",null,"If there was an error during deployment, you can delete your deployment and try\nagain with the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"astria-cli rollup deployment delete --config $ROLLUP_CONF_PATH\n")),(0,r.kt)("h2",{id:"default-to-astria-dev-cluster-namespace"},"Default to ",(0,r.kt)("inlineCode",{parentName:"h2"},"astria-dev-cluster")," namespace"),(0,r.kt)("p",null,"Set ",(0,r.kt)("inlineCode",{parentName:"p"},"kubectl")," to the correct namespace."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl config set-context --current --namespace=astria-dev-cluster\n")),(0,r.kt)("h2",{id:"watch-for-pod-startup"},"Watch for pod startup"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pods -w\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\n-blockscout-647745c66d-vz4ks 6/6 Running 1 (56s ago) 72s\n-faucet-68667bd895-pwqmz 1/1 Running 0 72s\n-geth-755cb8dd97-k5xp8 3/3 Running 0 72s\n")),(0,r.kt)("h2",{id:"check-block-retrieval-on-the-conductor"},"Check Block Retrieval on the Conductor"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export GETH_POD_NAME=-geth-755cb8dd97-k5x\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl logs $GETH_POD_NAME -c conductor\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'2023-10-16T20:49:16.858852Z INFO run_until_stopped: astria_conductor::executor: executed sequencer block sequencer_block_hash=Hash::Sha256(93C233F2A2A109FF6CC3162A98916BECAE6D8EC43520C995E82B6D1F2B2742EF) sequencer_block_height=423755 execution_block_hash="2d8b2219a30ea4cc409347320f377de937b9ca2425f670c4f913724a2d53b2aa"\n2023-10-16T20:49:18.922694Z INFO run_until_stopped: astria_conductor::executor: executing block with given parent block height=423756 parent_block_hash="2d8b2219a30ea4cc409347320f377de937b9ca2425f670c4f913724a2d53b2aa"\n2023-10-16T20:49:18.926380Z INFO run_until_stopped: astria_conductor::executor: executed sequencer block sequencer_block_hash=Hash::Sha256(EAD8701CB15D9B487DC7400ABC2FCB7A4F7E09E09F39D4D6B8FA97B74B5EC50F) sequencer_block_height=423756 execution_block_hash="de20c29febc808b7a2ded8513eb23be116fe441745ccf62d1366b4b9bb160d04"\n')),(0,r.kt)("h2",{id:"observe-your-deployment"},"Observe your Deployment"),(0,r.kt)("p",null,"Your rollups utility endpoints are as follows:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Utility"),(0,r.kt)("th",{parentName:"tr",align:null},"URL"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Block Explorer"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://blockscout."},"http://blockscout."),"./")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Faucet"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://faucet."},"http://faucet."),"./")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"RPC"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://executor."},"http://executor."),"./")))),(0,r.kt)("p",null,"Open the URLs in your browser to view your running rollup."),(0,r.kt)("h2",{id:"debug-ingress"},"Debug Ingress"),(0,r.kt)("p",null,"If you would like to view the ingress logs you can use the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n ingress-nginx\n# get the name of one of the pods\nexport INGRESS_POD_1=ingress-nginx-controller-6d6559598-ll8gv\n# view the logs\nkubectl logs $INGRESS_POD_1 -n ingress-nginx\n")),(0,r.kt)("h2",{id:"use-cast-to-interact-with-your-rollup"},"Use ",(0,r.kt)("inlineCode",{parentName:"h2"},"cast")," to Interact with your Rollup"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export ETH_RPC_URL=http://executor../\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast block 0\n")),(0,r.kt)("p",null,"Use an address of your choice."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export REC_ADDR=\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast balance $REC_ADDR\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast send $REC_ADDR --value 10000000000000000000 --private-key $ROLLUP_FAUCET_PRIV_KEY\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast balance $REC_ADDR\n")),(0,r.kt)("h2",{id:"fund-you-sequencer-account"},"Fund you Sequencer Account"),(0,r.kt)("p",null,"Using your sequencer pub key you created in the ",(0,r.kt)("a",{parentName:"p",href:"#create-a-new-sequencer-account"},"Create a New Sequencer\nAccount"),", copy and past the\n",(0,r.kt)("inlineCode",{parentName:"p"},"")," into the input on the faucet page, and mint funds\nto your account:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Sequencer Faucet",src:n(1721).Z,width:"1490",height:"794"})))}d.isMDXComponent=!0},1721:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/sequencer-faucet-63615ccc21b8c454150825d608e5dea6.png"}}]); \ No newline at end of file diff --git a/assets/js/3c203bfa.b50fc17e.js b/assets/js/3c203bfa.b50fc17e.js deleted file mode 100644 index 965280c..0000000 --- a/assets/js/3c203bfa.b50fc17e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[792],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(n),m=o,g=c["".concat(s,".").concat(m)]||c[m]||d[m]||a;return n?r.createElement(g,l(l({ref:t},u),{},{components:n})):r.createElement(g,l({ref:t},u))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[c]="string"==typeof e?e:o,l[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const a={sidebar_position:4},l="Remote Rollup Deployment",i={unversionedId:"running-a-rollup-on-astria-dusknet/remote-rollup-deployment",id:"running-a-rollup-on-astria-dusknet/remote-rollup-deployment",title:"Remote Rollup Deployment",description:"Creating a Rollup on Digital Ocean K8s",source:"@site/docs/running-a-rollup-on-astria-dusknet/4-remote-rollup-deployment.md",sourceDirName:"running-a-rollup-on-astria-dusknet",slug:"/running-a-rollup-on-astria-dusknet/remote-rollup-deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/remote-rollup-deployment",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/running-a-rollup-on-astria-dusknet/4-remote-rollup-deployment.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"docsSidebar",previous:{title:"Local Rollup Deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment"}},s={},p=[{value:"Creating a Rollup on Digital Ocean K8s",id:"creating-a-rollup-on-digital-ocean-k8s",level:2},{value:"Manually setup Digital Ocean Ingress",id:"manually-setup-digital-ocean-ingress",level:3}],u={toc:p},c="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(c,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"remote-rollup-deployment"},"Remote Rollup Deployment"),(0,o.kt)("h2",{id:"creating-a-rollup-on-digital-ocean-k8s"},"Creating a Rollup on Digital Ocean K8s"),(0,o.kt)("p",null,"The following assumes you are using ",(0,o.kt)("a",{parentName:"p",href:"https://www.digitalocean.com/products/kubernetes"},"Digital Ocean Kubernetes\n(DOKS)"),"."),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"You must use at least a 2 node cluster.")),(0,o.kt)("h3",{id:"manually-setup-digital-ocean-ingress"},"Manually setup Digital Ocean Ingress"),(0,o.kt)("p",null,"Follow the steps here to setup the nginx ingress controller:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://marketplace.digitalocean.com/apps/nginx-ingress-controller"},"https://marketplace.digitalocean.com/apps/nginx-ingress-controller"))),(0,o.kt)("p",null,"Follow the steps here to add your own domain:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.digitalocean.com/products/networking/dns/getting-started/dns-registrars/"},"https://docs.digitalocean.com/products/networking/dns/getting-started/dns-registrars/"))),(0,o.kt)("p",null,"Follow the steps here to set up an ",(0,o.kt)("inlineCode",{parentName:"p"},"A")," record for DNS:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.digitalocean.com/products/networking/dns/how-to/manage-records/#a-records"},"https://docs.digitalocean.com/products/networking/dns/how-to/manage-records/#a-records"))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"When configure=ing the ",(0,o.kt)("inlineCode",{parentName:"p"},"A")," record for DNS, the ",(0,o.kt)("inlineCode",{parentName:"p"},"directs to")," value should specify the ",(0,o.kt)("inlineCode",{parentName:"p"},"loadbalancer")," which was created for the ",(0,o.kt)("inlineCode",{parentName:"p"},"nginx-ingress-controller")," using the console. ")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/48680bfc.1735bf3c.js b/assets/js/48680bfc.1735bf3c.js new file mode 100644 index 0000000..e21f721 --- /dev/null +++ b/assets/js/48680bfc.1735bf3c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[32],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var l=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function a(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var u=l.createContext({}),i=function(e){var t=l.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=i(e.components);return l.createElement(u.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},m=l.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,u=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=i(n),m=r,h=c["".concat(u,".").concat(m)]||c[m]||d[m]||o;return n?l.createElement(h,a(a({ref:t},p),{},{components:n})):l.createElement(h,a({ref:t},p))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,a=new Array(o);a[0]=m;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[c]="string"==typeof e?e:r,a[1]=s;for(var i=2;i{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>i});var l=n(7462),r=(n(7294),n(3905));const o={sidebar_position:4},a="Run Multiple Rollups Locally",s={unversionedId:"dev-cluster/run-multiple-rollups-locally",id:"dev-cluster/run-multiple-rollups-locally",title:"Run Multiple Rollups Locally",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/dev-cluster/4-run-multiple-rollups-locally.md",sourceDirName:"dev-cluster",slug:"/dev-cluster/run-multiple-rollups-locally",permalink:"/docs/dev-cluster/run-multiple-rollups-locally",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/dev-cluster/4-run-multiple-rollups-locally.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"docsSidebar",previous:{title:"Running a Local Rollup",permalink:"/docs/dev-cluster/deploy-a-local-rollup"},next:{title:"Shutting Down the Cluster",permalink:"/docs/dev-cluster/shutdown"}},u={},i=[{value:"What's Going on Under the Hood?",id:"whats-going-on-under-the-hood",level:3}],p={toc:i},c="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(c,(0,l.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"run-multiple-rollups-locally"},"Run Multiple Rollups Locally"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,r.kt)("p",null,"At Astria we believe strongly that deploying a rollup should be as easy as deploying a smart contract. The dev-cluster shows this is indeed possible."),(0,r.kt)("p",null,"Navigate back to the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"dev-cluster"),"\nrepo in your terminal and run the following command with your own rollup name\nand network id:"),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"NOTE:")," The default rollup name and network id are ",(0,r.kt)("inlineCode",{parentName:"p"},"astria")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"912559"),". When\ndeploying your second rollup you ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("em",{parentName:"strong"},"must"))," use a different name and number.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"just deploy-rollup \n")),(0,r.kt)("p",null,"As before, it will take a moment for everything to spin up, but in the meantime keep the the rollup name and network id handy and navigate back to your browser and open a new window with the following url, replacing ",(0,r.kt)("inlineCode",{parentName:"p"},"rollup_name")," with the name you just used to deploy your new rollup:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"http://blockscout..localdev.me/\n")),(0,r.kt)("p",null,"Once everything has spin up you will see a new block explorer for your new rollup."),(0,r.kt)("p",null,"You can now deploy transaction to that rollup independently.\nIn the ",(0,r.kt)("inlineCode",{parentName:"p"},"astria-web3/packages/evm-test-data")," directory open a new terminal and run the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"just generate-transactions \n")),(0,r.kt)("p",null,"As before, this command will deploy test transaction data to your new rollup.\nYou can also go back to your original terminal window for the test data deployment on the default rollup and rerun the ",(0,r.kt)("inlineCode",{parentName:"p"},"just generate-transactions")," command. If you switch back and forth between the default block explorer window and your new rollup window, you will see transactions showing up on each rollup independently!"),(0,r.kt)("p",null,"To navigate to the new Block Explorer and Faucet from the additional rollup,\ntake the rollup name that you used and replace ",(0,r.kt)("inlineCode",{parentName:"p"},"")," in the urls\nbelow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"http://blockscout..localdev.me/\nhttp://faucet..localdev.me/\n")),(0,r.kt)("p",null,"The only limitations to running numerous rollups are the following:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Can your hardware handle it"),(0,r.kt)("li",{parentName:"ul"},"There are no rollup name and network id clashes")),(0,r.kt)("h3",{id:"whats-going-on-under-the-hood"},"What's Going on Under the Hood?"),(0,r.kt)("p",null,"One last thing to mention is what is actually happening when you deploy a new rollup in the dev-cluster. When you you deploy a new rollup the only new containers that are getting spun up in the cluster are a new rollup node, a conductor, block explorer, and faucet. Only one instance of the shared sequencer and the DA layer remain running and the transactions from all the rollups are collectively getting run though those networks."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Multiple Rollups",src:n(9276).Z,width:"5412",height:"2013"})),(0,r.kt)("p",null,"You can also use ",(0,r.kt)("inlineCode",{parentName:"p"},"kubectl")," to see that this is the case."),(0,r.kt)("p",null,"When running only the default rollup:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"dev-cluster % kubectl get deployments --all-namespaces\nNAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE\nastria-dev-cluster astria-blockscout 1/1 1 1 37s\nastria-dev-cluster astria-faucet 1/1 1 1 37s\nastria-dev-cluster astria-geth 1/1 1 1 37s\nastria-dev-cluster celestia-local 1/1 1 1 94m\nastria-dev-cluster sequencer 1/1 1 1 94m\ningress-nginx ingress-nginx-controller 1/1 1 1 94m\nkube-system calico-kube-controllers 1/1 1 1 95m\nkube-system coredns 2/2 2 2 95m\nlocal-path-storage local-path-provisioner 1/1 1 1 95m\n")),(0,r.kt)("p",null,"After deploying the second rollup:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"dev-cluster % kubectl get deployments --all-namespaces\nNAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE\nastria-dev-cluster anotherrollup-blockscout 1/1 1 1 114s\nastria-dev-cluster anotherrollup-faucet 1/1 1 1 114s\nastria-dev-cluster anotherrollup-geth 1/1 1 1 114s\nastria-dev-cluster astria-blockscout 1/1 1 1 2m13s\nastria-dev-cluster astria-faucet 1/1 1 1 2m13s\nastria-dev-cluster astria-geth 1/1 1 1 2m13s\nastria-dev-cluster celestia-local 1/1 1 1 95m\nastria-dev-cluster sequencer 1/1 1 1 95m\ningress-nginx ingress-nginx-controller 1/1 1 1 96m\nkube-system calico-kube-controllers 1/1 1 1 97m\nkube-system coredns 2/2 2 2 97m\nlocal-path-storage local-path-provisioner 1/1 1 1 97m\n")))}d.isMDXComponent=!0},9276:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/multiple-rollups-7f46706e741f9afc0fc8e84c3e96d790.png"}}]); \ No newline at end of file diff --git a/assets/js/48680bfc.66a0d49d.js b/assets/js/48680bfc.66a0d49d.js deleted file mode 100644 index 4f4bf09..0000000 --- a/assets/js/48680bfc.66a0d49d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[32],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var l=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var u=l.createContext({}),i=function(e){var t=l.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=i(e.components);return l.createElement(u.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},m=l.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,u=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=i(n),m=r,h=c["".concat(u,".").concat(m)]||c[m]||d[m]||a;return n?l.createElement(h,o(o({ref:t},p),{},{components:n})):l.createElement(h,o({ref:t},p))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=m;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[c]="string"==typeof e?e:r,o[1]=s;for(var i=2;i{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>i});var l=n(7462),r=(n(7294),n(3905));const a={sidebar_position:4},o="Run Multiple Rollups Locally",s={unversionedId:"dev-cluster/run-multiple-rollups-locally",id:"dev-cluster/run-multiple-rollups-locally",title:"Run Multiple Rollups Locally",description:"At Astria we believe strongly that deploying a rollup should be as easy as deploying a smart contract. The dev-cluster shows this is indeed possible.",source:"@site/docs/dev-cluster/4-run-multiple-rollups-locally.md",sourceDirName:"dev-cluster",slug:"/dev-cluster/run-multiple-rollups-locally",permalink:"/docs/dev-cluster/run-multiple-rollups-locally",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/dev-cluster/4-run-multiple-rollups-locally.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"docsSidebar",previous:{title:"Running a Local Rollup",permalink:"/docs/dev-cluster/deploy-a-local-rollup"},next:{title:"Shutting Down the Cluster",permalink:"/docs/dev-cluster/shutdown"}},u={},i=[{value:"What's Going on Under the Hood?",id:"whats-going-on-under-the-hood",level:3}],p={toc:i},c="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,l.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"run-multiple-rollups-locally"},"Run Multiple Rollups Locally"),(0,r.kt)("p",null,"At Astria we believe strongly that deploying a rollup should be as easy as deploying a smart contract. The dev-cluster shows this is indeed possible."),(0,r.kt)("p",null,"Navigate back to the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"dev-cluster"),"\nrepo in your terminal and run the following command with your own rollup name\nand network id:"),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"NOTE:")," The default rollup name and network id are ",(0,r.kt)("inlineCode",{parentName:"p"},"astria")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"912559"),". When\ndeploying your second rollup you ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("em",{parentName:"strong"},"must"))," use a different name and number.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"just deploy-rollup \n")),(0,r.kt)("p",null,"As before, it will take a moment for everything to spin up, but in the meantime keep the the rollup name and network id handy and navigate back to your browser and open a new window with the following url, replacing ",(0,r.kt)("inlineCode",{parentName:"p"},"rollup_name")," with the name you just used to deploy your new rollup:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"http://blockscout..localdev.me/\n")),(0,r.kt)("p",null,"Once everything has spin up you will see a new block explorer for your new rollup."),(0,r.kt)("p",null,"You can now deploy transaction to that rollup independently.\nIn the ",(0,r.kt)("inlineCode",{parentName:"p"},"astria-web3/packages/evm-test-data")," directory open a new terminal and run the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"just generate-transactions \n")),(0,r.kt)("p",null,"As before, this command will deploy test transaction data to your new rollup.\nYou can also go back to your original terminal window for the test data deployment on the default rollup and rerun the ",(0,r.kt)("inlineCode",{parentName:"p"},"just generate-transactions")," command. If you switch back and forth between the default block explorer window and your new rollup window, you will see transactions showing up on each rollup independently!"),(0,r.kt)("p",null,"To navigate to the new Block Explorer and Faucet from the additional rollup,\ntake the rollup name that you used and replace ",(0,r.kt)("inlineCode",{parentName:"p"},"")," in the urls\nbelow:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"http://blockscout..localdev.me/\nhttp://faucet..localdev.me/\n")),(0,r.kt)("p",null,"The only limitations to running numerous rollups are the following:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Can your hardware handle it"),(0,r.kt)("li",{parentName:"ul"},"There are no rollup name and network id clashes")),(0,r.kt)("h3",{id:"whats-going-on-under-the-hood"},"What's Going on Under the Hood?"),(0,r.kt)("p",null,"One last thing to mention is what is actually happening when you deploy a new rollup in the dev-cluster. When you you deploy a new rollup the only new containers that are getting spun up in the cluster are a new rollup node, a conductor, block explorer, and faucet. Only one instance of the shared sequencer and the DA layer remain running and the transactions from all the rollups are collectively getting run though those networks."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Multiple Rollups",src:n(9276).Z,width:"5412",height:"2013"})),(0,r.kt)("p",null,"You can also use ",(0,r.kt)("inlineCode",{parentName:"p"},"kubectl")," to see that this is the case."),(0,r.kt)("p",null,"When running only the default rollup:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"dev-cluster % kubectl get deployments --all-namespaces\nNAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE\nastria-dev-cluster astria-blockscout 1/1 1 1 37s\nastria-dev-cluster astria-faucet 1/1 1 1 37s\nastria-dev-cluster astria-geth 1/1 1 1 37s\nastria-dev-cluster celestia-local 1/1 1 1 94m\nastria-dev-cluster sequencer 1/1 1 1 94m\ningress-nginx ingress-nginx-controller 1/1 1 1 94m\nkube-system calico-kube-controllers 1/1 1 1 95m\nkube-system coredns 2/2 2 2 95m\nlocal-path-storage local-path-provisioner 1/1 1 1 95m\n")),(0,r.kt)("p",null,"After deploying the second rollup:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"dev-cluster % kubectl get deployments --all-namespaces\nNAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE\nastria-dev-cluster anotherrollup-blockscout 1/1 1 1 114s\nastria-dev-cluster anotherrollup-faucet 1/1 1 1 114s\nastria-dev-cluster anotherrollup-geth 1/1 1 1 114s\nastria-dev-cluster astria-blockscout 1/1 1 1 2m13s\nastria-dev-cluster astria-faucet 1/1 1 1 2m13s\nastria-dev-cluster astria-geth 1/1 1 1 2m13s\nastria-dev-cluster celestia-local 1/1 1 1 95m\nastria-dev-cluster sequencer 1/1 1 1 95m\ningress-nginx ingress-nginx-controller 1/1 1 1 96m\nkube-system calico-kube-controllers 1/1 1 1 97m\nkube-system coredns 2/2 2 2 97m\nlocal-path-storage local-path-provisioner 1/1 1 1 97m\n")))}d.isMDXComponent=!0},9276:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/multiple-rollups-7f46706e741f9afc0fc8e84c3e96d790.png"}}]); \ No newline at end of file diff --git a/assets/js/57be9303.6a2f4ad0.js b/assets/js/57be9303.6a2f4ad0.js new file mode 100644 index 0000000..a195302 --- /dev/null +++ b/assets/js/57be9303.6a2f4ad0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[531],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),c=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(i.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=c(n),h=o,f=p["".concat(i,".").concat(h)]||p[h]||d[h]||l;return n?r.createElement(f,a(a({ref:t},s),{},{components:n})):r.createElement(f,a({ref:t},s))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,a=new Array(l);a[0]=h;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u[p]="string"==typeof e?e:o,a[1]=u;for(var c=2;c{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>d,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var r=n(7462),o=(n(7294),n(3905));const l={sidebar_position:5},a="Shutting Down the Cluster",u={unversionedId:"dev-cluster/shutdown",id:"dev-cluster/shutdown",title:"Shutting Down the Cluster",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/dev-cluster/5-shutdown.md",sourceDirName:"dev-cluster",slug:"/dev-cluster/shutdown",permalink:"/docs/dev-cluster/shutdown",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/dev-cluster/5-shutdown.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"docsSidebar",previous:{title:"Run Multiple Rollups Locally",permalink:"/docs/dev-cluster/run-multiple-rollups-locally"}},i={},c=[{value:"Deleting Specific Rollups",id:"deleting-specific-rollups",level:2},{value:"Shutting Down the Whole Cluster",id:"shutting-down-the-whole-cluster",level:2}],s={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"shutting-down-the-cluster"},"Shutting Down the Cluster"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,o.kt)("h2",{id:"deleting-specific-rollups"},"Deleting Specific Rollups"),(0,o.kt)("p",null,"To delete a specific rollup deployment, you can use the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"just delete-rollup \n")),(0,o.kt)("p",null,"This will remove the rollup, its block explorer, and faucet, but keep the rest\nof the cluster running."),(0,o.kt)("h2",{id:"shutting-down-the-whole-cluster"},"Shutting Down the Whole Cluster"),(0,o.kt)("p",null,"If you just want to shut everything down, you can run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"just clean\n")),(0,o.kt)("p",null,"To delete all the data that may have also been created during your testing, you\ncan then run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"just clean-persisted-data\n")),(0,o.kt)("p",null,"Which will delete all the local data created."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/57be9303.8a88b46c.js b/assets/js/57be9303.8a88b46c.js deleted file mode 100644 index b17e0c8..0000000 --- a/assets/js/57be9303.8a88b46c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[531],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>f});var r=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=r.createContext({}),c=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=c(e.components);return r.createElement(i.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var n=e.components,l=e.mdxType,o=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=c(n),h=l,f=p["".concat(i,".").concat(h)]||p[h]||d[h]||o;return n?r.createElement(f,a(a({ref:t},s),{},{components:n})):r.createElement(f,a({ref:t},s))}));function f(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=n.length,a=new Array(o);a[0]=h;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u[p]="string"==typeof e?e:l,a[1]=u;for(var c=2;c{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>c});var r=n(7462),l=(n(7294),n(3905));const o={sidebar_position:5},a="Shutting Down the Cluster",u={unversionedId:"dev-cluster/shutdown",id:"dev-cluster/shutdown",title:"Shutting Down the Cluster",description:"Deleting Specific Rollups",source:"@site/docs/dev-cluster/5-shutdown.md",sourceDirName:"dev-cluster",slug:"/dev-cluster/shutdown",permalink:"/docs/dev-cluster/shutdown",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/dev-cluster/5-shutdown.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"docsSidebar",previous:{title:"Run Multiple Rollups Locally",permalink:"/docs/dev-cluster/run-multiple-rollups-locally"},next:{title:"Overview",permalink:"/docs/running-a-rollup-on-astria-dusknet/overview"}},i={},c=[{value:"Deleting Specific Rollups",id:"deleting-specific-rollups",level:2},{value:"Shutting Down the Whole Cluster",id:"shutting-down-the-whole-cluster",level:2}],s={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,l.kt)(p,(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"shutting-down-the-cluster"},"Shutting Down the Cluster"),(0,l.kt)("h2",{id:"deleting-specific-rollups"},"Deleting Specific Rollups"),(0,l.kt)("p",null,"To delete a specific rollup deployment, you can use the following command:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"just delete-rollup \n")),(0,l.kt)("p",null,"This will remove the rollup, its block explorer, and faucet, but keep the rest\nof the cluster running."),(0,l.kt)("h2",{id:"shutting-down-the-whole-cluster"},"Shutting Down the Whole Cluster"),(0,l.kt)("p",null,"If you just want to shut everything down, you can run:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"just clean\n")),(0,l.kt)("p",null,"To delete all the data that may have also been created during your testing, you\ncan then run:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"just clean-persisted-data\n")),(0,l.kt)("p",null,"Which will delete all the local data created."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6ff8e36b.986ffb05.js b/assets/js/6ff8e36b.986ffb05.js deleted file mode 100644 index 564cd1d..0000000 --- a/assets/js/6ff8e36b.986ffb05.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[494],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>h});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),l=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),d=l(r),f=n,h=d["".concat(s,".").concat(f)]||d[f]||p[f]||a;return r?o.createElement(h,i(i({ref:t},u),{},{components:r})):o.createElement(h,i({ref:t},u))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[d]="string"==typeof e?e:n,i[1]=c;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:7},i="Conductor",c={unversionedId:"overview-of-astria/architecture/conductor",id:"overview-of-astria/architecture/conductor",title:"Conductor",description:"Conductor's role is to drive the deterministic execution of sequencer blocks to",source:"@site/docs/overview-of-astria/architecture/7-conductor.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/conductor",permalink:"/docs/overview-of-astria/architecture/conductor",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/7-conductor.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"docsSidebar",previous:{title:"Relayer",permalink:"/docs/overview-of-astria/architecture/relayer"},next:{title:"Data Availability Layer",permalink:"/docs/overview-of-astria/architecture/data-availability-layer"}},s={},l=[],u={toc:l},d="wrapper";function p(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"conductor"},"Conductor"),(0,n.kt)("p",null,"Conductor's role is to drive the deterministic execution of sequencer blocks to\nrollups. "),(0,n.kt)("p",null,"It abstracts away the logic required to read data from the DA and the\nSequencer, tracking firm and soft commitments, block and header shapes, as well\nas verification of the data. The rollup implements the Execution API server, and\nruns the Conductor alongside to drive deterministic execution. The Conductor is\neffectively stateless but does ephemerally store some information about the\nblocks it has seen and passed on to be executed. "),(0,n.kt)("p",null,"It filters the transactions that are relevant to the given rollup it is running\nalong side, out of the sequencer blocks for execution. The data that it does store is\nfor sending commitment updates to the rollup."),(0,n.kt)("p",null,"As mentioned in the\n",(0,n.kt)("a",{parentName:"p",href:"/docs/overview-of-astria/architecture/relayer"},"Relayer"),' section, any data\nreceived by the Conductor directly from the Relayer is considered a soft commit.\nThis data is filtered using the rollup\'s namespace and only transactions that\nare relevant to the rollup are passed on as blocks for execution. These blocks\nare also marked as "safe" withing the rollup. The Conductor regularly polls Celestia for new data\nand when it sees the same blocks in Celestia that it has already seen from the\nRelayer, it sends a firm commit message to the rollup to update that block to\n"finalized."'),(0,n.kt)("p",null,"See the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main/crates/astria-conductor"},"Conductor code\nhere.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6ff8e36b.d39fa8de.js b/assets/js/6ff8e36b.d39fa8de.js new file mode 100644 index 0000000..23355b0 --- /dev/null +++ b/assets/js/6ff8e36b.d39fa8de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[494],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>h});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),l=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),d=l(r),f=n,h=d["".concat(s,".").concat(f)]||d[f]||p[f]||a;return r?o.createElement(h,i(i({ref:t},u),{},{components:r})):o.createElement(h,i({ref:t},u))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[d]="string"==typeof e?e:n,i[1]=c;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:7},i="Conductor",c={unversionedId:"overview-of-astria/architecture/conductor",id:"overview-of-astria/architecture/conductor",title:"Conductor",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/architecture/7-conductor.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/conductor",permalink:"/docs/overview-of-astria/architecture/conductor",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/7-conductor.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"docsSidebar",previous:{title:"Relayer",permalink:"/docs/overview-of-astria/architecture/relayer"},next:{title:"Data Availability Layer",permalink:"/docs/overview-of-astria/architecture/data-availability-layer"}},s={},l=[],u={toc:l},d="wrapper";function p(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"conductor"},"Conductor"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,n.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,n.kt)("p",null,"Conductor's role is to drive the deterministic execution of sequencer blocks to\nrollups. "),(0,n.kt)("p",null,"It abstracts away the logic required to read data from the DA and the\nSequencer, tracking firm and soft commitments, block and header shapes, as well\nas verification of the data. The rollup implements the Execution API server, and\nruns the Conductor alongside to drive deterministic execution. The Conductor is\neffectively stateless but does ephemerally store some information about the\nblocks it has seen and passed on to be executed. "),(0,n.kt)("p",null,"It filters the transactions that are relevant to the given rollup it is running\nalong side, out of the sequencer blocks for execution. The data that it does store is\nfor sending commitment updates to the rollup."),(0,n.kt)("p",null,"As mentioned in the\n",(0,n.kt)("a",{parentName:"p",href:"/docs/overview-of-astria/architecture/relayer"},"Relayer"),' section, any data\nreceived by the Conductor directly from the Relayer is considered a soft commit.\nThis data is filtered using the rollup\'s namespace and only transactions that\nare relevant to the rollup are passed on as blocks for execution. These blocks\nare also marked as "safe" withing the rollup. The Conductor regularly polls Celestia for new data\nand when it sees the same blocks in Celestia that it has already seen from the\nRelayer, it sends a firm commit message to the rollup to update that block to\n"finalized."'),(0,n.kt)("p",null,"See the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main/crates/astria-conductor"},"Conductor code\nhere.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7227b5a9.c59aedaa.js b/assets/js/7227b5a9.c59aedaa.js deleted file mode 100644 index 1898667..0000000 --- a/assets/js/7227b5a9.c59aedaa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[603],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=a.createContext({}),c=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},s=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=c(n),m=r,h=p["".concat(i,".").concat(m)]||p[m]||d[m]||l;return n?a.createElement(h,o(o({ref:t},s),{},{components:n})):a.createElement(h,o({ref:t},s))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u[p]="string"==typeof e?e:r,o[1]=u;for(var c=2;c{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var a=n(7462),r=(n(7294),n(3905));const l={sidebar_position:3},o="Local Rollup Deployment",u={unversionedId:"running-a-rollup-on-astria-dusknet/local-rollup-deployment",id:"running-a-rollup-on-astria-dusknet/local-rollup-deployment",title:"Local Rollup Deployment",description:"Deploy the Local Run Environment",source:"@site/docs/running-a-rollup-on-astria-dusknet/3-local-rollup-deployment.md",sourceDirName:"running-a-rollup-on-astria-dusknet",slug:"/running-a-rollup-on-astria-dusknet/local-rollup-deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/running-a-rollup-on-astria-dusknet/3-local-rollup-deployment.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docsSidebar",previous:{title:"Configure the Remote Rollup",permalink:"/docs/running-a-rollup-on-astria-dusknet/configure-remote-rollup"},next:{title:"Remote Rollup Deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/remote-rollup-deployment"}},i={},c=[{value:"Deploy the Local Run Environment",id:"deploy-the-local-run-environment",level:2},{value:"Create a New Sequencer Account",id:"create-a-new-sequencer-account",level:2},{value:"Deploy the Configuration",id:"deploy-the-configuration",level:2},{value:"Use cast to Interact with your Rollup",id:"use-cast-to-interact-with-your-rollup",level:2},{value:"Deposit Funds with the Faucet",id:"deposit-funds-with-the-faucet",level:2}],s={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(p,(0,a.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"local-rollup-deployment"},"Local Rollup Deployment"),(0,r.kt)("h2",{id:"deploy-the-local-run-environment"},"Deploy the Local Run Environment"),(0,r.kt)("p",null,"In another directory, use the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"Astria dev-cluster"),", deploy\nthe local environment where your rollup will run.\nAlthough we are using the dev-cluster here again, this is different from ",(0,r.kt)("a",{parentName:"p",href:"/docs/dev-cluster/run-dev-cluster-locally"},"running the\nfull local setup discussed\npreviously"),". In this instance, we\nare using the dev-cluster to setup the local environment in which the rollup,\nblock explorer, and faucet will run (like before), but we will not be running\nthe sequencer or any of the other components."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Make sure that Docker is running before deploying with ",(0,r.kt)("inlineCode",{parentName:"p"},"just"),".")),(0,r.kt)("p",null,"In the ",(0,r.kt)("strong",{parentName:"p"},"dev-cluster repo"),", run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"git clone git@github.com:astriaorg/dev-cluster.git\ncd dev-cluster\njust create-cluster\njust deploy-ingress-controller\njust wait-for-ingress-controller\n")),(0,r.kt)("p",null,"This creates the local environment where the rollup will run. Unlike when the\nfull dev-cluster is run locally, the sequencer and DA are not spun up. The\ndev-net is already running remotely."),(0,r.kt)("h2",{id:"create-a-new-sequencer-account"},"Create a New Sequencer Account"),(0,r.kt)("p",null,"Back in the ",(0,r.kt)("strong",{parentName:"p"},"Astria repo"),", run the cli to create the address and key information for a new sequencer account."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./target/release/astria-cli sequencer account create\n")),(0,r.kt)("p",null,"The address, public and private keys will be different from those below. Save\nthese values for later use."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Create Sequencer Account\n\n# \nPrivate Key: "5562f2a6e97c01098e2ae2d64d10189716e44d36b1f2f2151695856689981622"\nPublic Key: "ec2059fc6c4cb1b29b24b75116afa88072d8dd2fcf4659b672d0301cfc74f613"\nAddress: "8a2f9c31b064b62b6154ace29bfb3498b0825f68"\n')),(0,r.kt)("p",null,"Now export the private key printed above:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export COMPOSER_PRIV_KEY=\n")),(0,r.kt)("h2",{id:"deploy-the-configuration"},"Deploy the Configuration"),(0,r.kt)("p",null,"Then deploy the configuration with:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./target/release/astria-cli rollup deployment create \\\n --config $ROLLUP_CONF_FILE \\\n --faucet-private-key $ROLLUP_FAUCET_PRIV_KEY \\\n --sequencer-private-key $COMPOSER_PRIV_KEY\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you did not inclue a genesis account when configuring your rollup, you can\nleave out the ",(0,r.kt)("inlineCode",{parentName:"p"},"--faucet-private-key $ROLLUP_FAUCET_PRIV_KEY")," in the command\nabove.")),(0,r.kt)("h2",{id:"use-cast-to-interact-with-your-rollup"},"Use ",(0,r.kt)("inlineCode",{parentName:"h2"},"cast")," to Interact with your Rollup"),(0,r.kt)("p",null,"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"cast")," to view the blocks on your rollup."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# replace with the name you used in your configuration\nexport ETH_RPC_URL=http://executor.$ROLLUP_NAME.localdev.me/\ncast block 0\n")),(0,r.kt)("p",null,"Which should print something like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"baseFeePerGas 1000000000\ndifficulty 10000000\nextraData 0x\ngasLimit 8000000\ngasUsed 0\nhash 0xa2d5f000ef275b5f6ce6af5a0de50c17e5893c5ea664b77f534eb62f317caff1\nlogsBloom 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nminer 0x0000000000000000000000000000000000000000\nmixHash 0x0000000000000000000000000000000000000000000000000000000000000000\nnonce 0x0000000000000000\nnumber 0\nparentHash 0x0000000000000000000000000000000000000000000000000000000000000000\nreceiptsRoot 0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\nsealFields []\nsha3Uncles 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\nsize 512\nstateRoot 0xc1a913facf57b18de72d25155293c53b2a463d93a1de735269410b8663f2efca\ntimestamp 0\nwithdrawalsRoot\ntotalDifficulty 10000000\ntransactions: []\n")),(0,r.kt)("p",null,"If you have an address you would like to deposit funds to, export that address\nto the env vars:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export REC_ADDR=
\n")),(0,r.kt)("p",null,"You can also use ",(0,r.kt)("inlineCode",{parentName:"p"},"cast")," to view your balance:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast balance $REC_ADDR\n")),(0,r.kt)("p",null,"Send an ammount to your address:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast send $REC_ADDR --value 10000000000000000000 --private-key $ROLLUP_FAUCET_PRIV_KEY\n")),(0,r.kt)("p",null,"And view your new balance:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast balance $REC_ADDR\n")),(0,r.kt)("h2",{id:"deposit-funds-with-the-faucet"},"Deposit Funds with the Faucet"),(0,r.kt)("p",null,"Your rollups utility endpoints are as follows:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Utility"),(0,r.kt)("th",{parentName:"tr",align:null},"URL"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Block Explorer"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://blockscout."},"http://blockscout."),".localdev.me/")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Faucet"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://faucet."},"http://faucet."),".localdev.me/")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"RPC"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://executor."},"http://executor."),".localdev.me/")))),(0,r.kt)("p",null,"To deposit funds with the Faucet, open the URL for the faucet above in your browser and past\nyour previously used ",(0,r.kt)("inlineCode",{parentName:"p"},"
")," into the input to give yourself some funds."),(0,r.kt)("p",null,"You can also open the Block Explorer in a new browser window to see the faucet\ntransaction appear, or any of the transactions you have sent using ",(0,r.kt)("inlineCode",{parentName:"p"},"cast"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7227b5a9.eb680963.js b/assets/js/7227b5a9.eb680963.js new file mode 100644 index 0000000..eec8197 --- /dev/null +++ b/assets/js/7227b5a9.eb680963.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[603],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),i=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=i(e.components);return a.createElement(c.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,c=e.parentName,p=u(e,["components","mdxType","originalType","parentName"]),s=i(n),m=r,h=s["".concat(c,".").concat(m)]||s[m]||d[m]||l;return n?a.createElement(h,o(o({ref:t},p),{},{components:n})):a.createElement(h,o({ref:t},p))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[s]="string"==typeof e?e:r,o[1]=u;for(var i=2;i{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>u,toc:()=>i});var a=n(7462),r=(n(7294),n(3905));const l={sidebar_position:3},o="Local Rollup Deployment",u={unversionedId:"running-a-rollup-on-astria-dusknet/local-rollup-deployment",id:"running-a-rollup-on-astria-dusknet/local-rollup-deployment",title:"Local Rollup Deployment",description:"Deploy the Local Run Environment",source:"@site/docs/running-a-rollup-on-astria-dusknet/3-local-rollup-deployment.md",sourceDirName:"running-a-rollup-on-astria-dusknet",slug:"/running-a-rollup-on-astria-dusknet/local-rollup-deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/running-a-rollup-on-astria-dusknet/3-local-rollup-deployment.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docsSidebar",previous:{title:"Configure the Remote Rollup",permalink:"/docs/running-a-rollup-on-astria-dusknet/configure-remote-rollup"},next:{title:"Remote Rollup Deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/remote-rollup-deployment"}},c={},i=[{value:"Deploy the Local Run Environment",id:"deploy-the-local-run-environment",level:2},{value:"Create a New Sequencer Account",id:"create-a-new-sequencer-account",level:2},{value:"Deploy the Configuration",id:"deploy-the-configuration",level:2},{value:"Observe your Deployment",id:"observe-your-deployment",level:2},{value:"Use cast to Interact with your Rollup",id:"use-cast-to-interact-with-your-rollup",level:2},{value:"Fund you Sequencer Account",id:"fund-you-sequencer-account",level:2}],p={toc:i},s="wrapper";function d(e){let{components:t,...l}=e;return(0,r.kt)(s,(0,a.Z)({},p,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"local-rollup-deployment"},"Local Rollup Deployment"),(0,r.kt)("h2",{id:"deploy-the-local-run-environment"},"Deploy the Local Run Environment"),(0,r.kt)("p",null,"In another directory, use the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster"},"Astria\ndev-cluster"),", deploy\nthe local environment where your rollup will run.\nAlthough we are using the dev-cluster here again, this is different from\n",(0,r.kt)("a",{parentName:"p",href:"/docs/dev-cluster/run-dev-cluster-locally"},"running the full local setup discussed\npreviously"),". In this instance, we\nare using the dev-cluster to setup the local environment in which the rollup,\nblock explorer, and faucet will run (like before), but we will not be running\nthe sequencer or any of the other components."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Make sure that Docker is running before deploying with ",(0,r.kt)("inlineCode",{parentName:"p"},"just"),".")),(0,r.kt)("p",null,"In the ",(0,r.kt)("strong",{parentName:"p"},"dev-cluster repo"),", run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"git clone git@github.com:astriaorg/dev-cluster.git\ncd dev-cluster\njust create-cluster\njust deploy-ingress-controller\njust wait-for-ingress-controller\n")),(0,r.kt)("p",null,"This creates the local environment where the rollup will run. Unlike when the\nfull dev-cluster is run locally, the sequencer and DA are not spun up. The\ndev-net is already running remotely."),(0,r.kt)("h2",{id:"create-a-new-sequencer-account"},"Create a New Sequencer Account"),(0,r.kt)("p",null,"Back in the ",(0,r.kt)("strong",{parentName:"p"},"Astria repo"),", run the cli to create the address and key\ninformation for a new sequencer account. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"astria-cli sequencer account create\n")),(0,r.kt)("p",null,"The address, public and private keys will be different from those below. Save\nthese values for later use."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Create Sequencer Account\n\nPrivate Key: "5562...1622" # \nPublic Key: "ec20...f613" # \nAddress: "8a2f...5f68"\n')),(0,r.kt)("p",null,"Keep track of the ",(0,r.kt)("inlineCode",{parentName:"p"},"")," as it will be used with the\nFaucet later on for funding your sequencer account."),(0,r.kt)("p",null,"Now export the private key printed above:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export SEQUENCER_PRIV_KEY=\n")),(0,r.kt)("h2",{id:"deploy-the-configuration"},"Deploy the Configuration"),(0,r.kt)("p",null,"Then deploy the configuration with:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"astria-cli rollup deployment create \\\n --config $ROLLUP_CONF_FILE \\\n --faucet-private-key $ROLLUP_FAUCET_PRIV_KEY \\\n --sequencer-private-key $SEQUENCER_PRIV_KEY\n")),(0,r.kt)("h2",{id:"observe-your-deployment"},"Observe your Deployment"),(0,r.kt)("p",null,"Your rollups utility endpoints are as follows:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Utility"),(0,r.kt)("th",{parentName:"tr",align:null},"URL"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Block Explorer"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://blockscout."},"http://blockscout."),".localdev.me/")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Faucet"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://faucet."},"http://faucet."),".localdev.me/")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"RPC"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://executor."},"http://executor."),".localdev.me/")))),(0,r.kt)("p",null,"Open the URLs in your browser to view your running rollup."),(0,r.kt)("p",null,"You can also open the Block Explorer in a new browser window to see the faucet\ntransaction appear, or any of the transactions you have sent using ",(0,r.kt)("inlineCode",{parentName:"p"},"cast"),"."),(0,r.kt)("h2",{id:"use-cast-to-interact-with-your-rollup"},"Use ",(0,r.kt)("inlineCode",{parentName:"h2"},"cast")," to Interact with your Rollup"),(0,r.kt)("p",null,"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"cast")," to view the blocks on your rollup."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# replace with the name you used in your configuration\nexport ETH_RPC_URL=http://executor.$ROLLUP_NAME.localdev.me/\ncast block 0\n")),(0,r.kt)("p",null,"Which should print something like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"baseFeePerGas 1000000000\ndifficulty 10000000\nextraData 0x\ngasLimit 8000000\ngasUsed 0\nhash 0xa2d5f000ef275b5f6ce6af5a0de50c17e5893c5ea664b77f534eb62f317caff1\nlogsBloom 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nminer 0x0000000000000000000000000000000000000000\nmixHash 0x0000000000000000000000000000000000000000000000000000000000000000\nnonce 0x0000000000000000\nnumber 0\nparentHash 0x0000000000000000000000000000000000000000000000000000000000000000\nreceiptsRoot 0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\nsealFields []\nsha3Uncles 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\nsize 512\nstateRoot 0xc1a913facf57b18de72d25155293c53b2a463d93a1de735269410b8663f2efca\ntimestamp 0\nwithdrawalsRoot\ntotalDifficulty 10000000\ntransactions: []\n")),(0,r.kt)("p",null,"If you have an address you would like to deposit funds to, export that address\nto the env vars:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export REC_ADDR=
\n")),(0,r.kt)("p",null,"You can also use ",(0,r.kt)("inlineCode",{parentName:"p"},"cast")," to view your balance:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast balance $REC_ADDR\n")),(0,r.kt)("p",null,"Send an ammount to your address:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast send $REC_ADDR --value 10000000000000000000 --private-key $ROLLUP_FAUCET_PRIV_KEY\n")),(0,r.kt)("p",null,"And view your new balance:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast balance $REC_ADDR\n")),(0,r.kt)("h2",{id:"fund-you-sequencer-account"},"Fund you Sequencer Account"),(0,r.kt)("p",null,"Using your sequencer pub key you created in the ",(0,r.kt)("a",{parentName:"p",href:"#create-a-new-sequencer-account"},"Create a New Sequencer\nAccount"),", copy and past the\n",(0,r.kt)("inlineCode",{parentName:"p"},"")," into the input on the faucet page, and mint funds\nto your account:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Sequencer Faucet",src:n(1721).Z,width:"1490",height:"794"})))}d.isMDXComponent=!0},1721:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/sequencer-faucet-63615ccc21b8c454150825d608e5dea6.png"}}]); \ No newline at end of file diff --git a/assets/js/88d7fd6a.312f7a64.js b/assets/js/88d7fd6a.312f7a64.js deleted file mode 100644 index c1ccba3..0000000 --- a/assets/js/88d7fd6a.312f7a64.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[899],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),s=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=s(n),m=a,k=c["".concat(u,".").concat(m)]||c[m]||d[m]||l;return n?r.createElement(k,o(o({ref:t},p),{},{components:n})):r.createElement(k,o({ref:t},p))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=m;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[c]="string"==typeof e?e:a,o[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const l={sidebar_position:2},o="Configure the Remote Rollup",i={unversionedId:"running-a-rollup-on-astria-dusknet/configure-remote-rollup",id:"running-a-rollup-on-astria-dusknet/configure-remote-rollup",title:"Configure the Remote Rollup",description:"Endpoints",source:"@site/docs/running-a-rollup-on-astria-dusknet/2-configure-remote-rollup.md",sourceDirName:"running-a-rollup-on-astria-dusknet",slug:"/running-a-rollup-on-astria-dusknet/configure-remote-rollup",permalink:"/docs/running-a-rollup-on-astria-dusknet/configure-remote-rollup",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/running-a-rollup-on-astria-dusknet/2-configure-remote-rollup.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docsSidebar",previous:{title:"Overview",permalink:"/docs/running-a-rollup-on-astria-dusknet/overview"},next:{title:"Local Rollup Deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment"}},u={},s=[{value:"Endpoints",id:"endpoints",level:2},{value:"Get the Current Sequencer Block Height",id:"get-the-current-sequencer-block-height",level:2},{value:"Build the astria-cli",id:"build-the-astria-cli",level:2},{value:"Using the astria-cli",id:"using-the-astria-cli",level:2},{value:"Environment Variables + cli",id:"environment-variables--cli",level:2},{value:"Creating your own Genesis Account",id:"creating-your-own-genesis-account",level:2}],p={toc:s},c="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"configure-the-remote-rollup"},"Configure the Remote Rollup"),(0,a.kt)("h2",{id:"endpoints"},"Endpoints"),(0,a.kt)("p",null,"Endpoints for the remote cluster are the following:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"NAME (as helm creates)"),(0,a.kt)("th",{parentName:"tr",align:null},"HOSTS"),(0,a.kt)("th",{parentName:"tr",align:null},"ADDRESS"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"astria-ingress"),(0,a.kt)("td",{parentName:"tr",align:null},"rpc.evm.dusk-1.devnet.astria.org"),(0,a.kt)("td",{parentName:"tr",align:null},"34.160.214.22")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"blockscout-ingress"),(0,a.kt)("td",{parentName:"tr",align:null},"explorer.evm.dusk-1.devnet.astria.org"),(0,a.kt)("td",{parentName:"tr",align:null},"34.111.167.16")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"faucet-ingress"),(0,a.kt)("td",{parentName:"tr",align:null},"faucet.evm.dusk-1.devnet.astria.org"),(0,a.kt)("td",{parentName:"tr",align:null},"130.211.4.120")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"sequencer-faucet"),(0,a.kt)("td",{parentName:"tr",align:null},"faucet.sequencer.dusk-1.devnet.astria.org"),(0,a.kt)("td",{parentName:"tr",align:null},"34.36.8.102")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"sequencer-ingress"),(0,a.kt)("td",{parentName:"tr",align:null},"rpc.sequencer.dusk-1.devnet.astria.org"),(0,a.kt)("td",{parentName:"tr",align:null},"34.111.73.187")))),(0,a.kt)("h2",{id:"get-the-current-sequencer-block-height"},"Get the Current Sequencer Block Height"),(0,a.kt)("p",null,"Take the ",(0,a.kt)("inlineCode",{parentName:"p"},"sequencer-ingress")," URL and run the following command to get the\ncurrent block height of the sequencer."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"curl -s https://rpc.sequencer.dusk-1.devnet.astria.org/block | jq .result.block.header.height\n")),(0,a.kt)("p",null,"Keep track of this block height as it will be used for making the rollup config\nlater on. You will use this printed height in place of\n",(0,a.kt)("inlineCode",{parentName:"p"},"")," in the steps below."),(0,a.kt)("h2",{id:"build-the-astria-cli"},"Build the ",(0,a.kt)("inlineCode",{parentName:"h2"},"astria-cli")),(0,a.kt)("p",null,"Clone the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main"},"Astria repo"),", checkout\nthe ",(0,a.kt)("inlineCode",{parentName:"p"},"feature/self-serve-rollup-cli")," branch, and build the new config using the ",(0,a.kt)("inlineCode",{parentName:"p"},"astria-cli"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:astriaorg/astria.git\ncd astria\ngit checkout feature/self-serve-rollup-cli\ncd crates/astria-cli\ncargo build --release\n# return to the root dir of the `astria` repo\ncd ../..\n")),(0,a.kt)("h2",{id:"using-the-astria-cli"},"Using the ",(0,a.kt)("inlineCode",{parentName:"h2"},"astria-cli")),(0,a.kt)("p",null,"Replace the tags in the commands and env vars below, as follows:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Var Name"),(0,a.kt)("th",{parentName:"tr",align:null},"Var Type"),(0,a.kt)("th",{parentName:"tr",align:null},"Description"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"")),(0,a.kt)("td",{parentName:"tr",align:null},"String"),(0,a.kt)("td",{parentName:"tr",align:null},"The name of your rollup")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"")),(0,a.kt)("td",{parentName:"tr",align:null},"String"),(0,a.kt)("td",{parentName:"tr",align:null},"Recommended to be the same as your rollup name")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"")),(0,a.kt)("td",{parentName:"tr",align:null},"u64"),(0,a.kt)("td",{parentName:"tr",align:null},"The id of your network")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"")),(0,a.kt)("td",{parentName:"tr",align:null},"u64"),(0,a.kt)("td",{parentName:"tr",align:null},"The height of the sequencer (found above)")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"")),(0,a.kt)("td",{parentName:"tr",align:null},"[u8; 40]"),(0,a.kt)("td",{parentName:"tr",align:null},"A wallet address")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"")),(0,a.kt)("td",{parentName:"tr",align:null},"u64"),(0,a.kt)("td",{parentName:"tr",align:null},"A balance")))),(0,a.kt)("h2",{id:"environment-variables--cli"},"Environment Variables + cli"),(0,a.kt)("p",null,"Instead of setting the entire config in one command, you can optionally set the\nfollowing environment variables first:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_USE_TTY=true\nexport ROLLUP_LOG_LEVEL=DEBUG\nexport ROLLUP_NAME=\nexport ROLLUP_CHAIN_ID=0x\nexport ROLLUP_NETWORK_ID=\nexport ROLLUP_SKIP_EMPTY_BLOCKS=false\nexport ROLLUP_SEQUENCER_INITIAL_BLOCK_HEIGHT=\nexport ROLLUP_SEQUENCER_WEBSOCKET=wss://rpc.sequencer.dusk-1.devnet.astria.org/websocket\nexport ROLLUP_SEQUENCER_RPC=https://rpc.sequencer.dusk-1.devnet.astria.org\n")),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"See the ",(0,a.kt)("a",{parentName:"p",href:"#creating-your-own-genesis-account"},"Creating your own Genesis Account")," section below if you would like to\nadd a pre-funded account genesis account.")),(0,a.kt)("p",null,"Then just run the basic config create command:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"./target/release/astria-cli rollup config create\n")),(0,a.kt)("p",null,"You can then run:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"cat -rollup-conf.yaml\n")),(0,a.kt)("p",null,"to print out the config file contents to double check everything:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"config:\n useTTY: true\n logLevel: DEBUG\n rollup:\n name: \n chainId: \n networkId: \n skipEmptyBlocks: true\n genesisAccounts: []\n sequencer:\n initialBlockHeight: \n websocket: ws://rpc.sequencer.dusk-1.devnet.astria.org/websocket\n rpc: http://rpc.sequencer.dusk-1.devnet.astria.org\n celestia:\n fullNodeUrl: http://celestia-service:26658\n")),(0,a.kt)("p",null,"Export this file to the env vars as follows:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_CONF_FILE=-rollup-conf.yaml\n")),(0,a.kt)("p",null,"At this point, if you do not want to add any genesis accounts to your rollup you\ncan move on to the next section."),(0,a.kt)("p",null,"If you do want to add an account(s), see the next section."),(0,a.kt)("h2",{id:"creating-your-own-genesis-account"},"Creating your own Genesis Account"),(0,a.kt)("p",null,"You can optionally add a genesis account(s) to your rollup during configuration.\nThis is done by ",(0,a.kt)("inlineCode",{parentName:"p"},"export"),"ing the additional ",(0,a.kt)("inlineCode",{parentName:"p"},"ROLLUP_GENESIS_ACCOUNTS")," environment variable."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_GENESIS_ACCOUNTS=:100000000000000000000\n")),(0,a.kt)("p",null,"You can create an account using"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cast w new\n")),(0,a.kt)("p",null,"to create a new account:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"Successfully created new keypair.\nAddress: 0xfFe9...5f8b # \nPrivate key: 0x332e...a8fb # \n")),(0,a.kt)("p",null,"Set ",(0,a.kt)("inlineCode",{parentName:"p"},"")," to the address printed out from the new command, and\n",(0,a.kt)("inlineCode",{parentName:"p"},"export")," the private key to the env vars using:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_FAUCET_PRIV_KEY=\n")),(0,a.kt)("admonition",{type:"danger"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"NEVER")," use a private key you use on a live a network. "),(0,a.kt)("p",{parentName:"admonition"},"For ease of use we recommend you set this to an key which you have access to")),(0,a.kt)("p",null,"If you do use a genesis account, your full env var export will look something\nlike this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_USE_TTY=true\nexport ROLLUP_LOG_LEVEL=DEBUG\nexport ROLLUP_NAME=\nexport ROLLUP_CHAIN_ID=\nexport ROLLUP_NETWORK_ID=\nexport ROLLUP_SKIP_EMPTY_BLOCKS=false\nexport ROLLUP_GENESIS_ACCOUNTS=:100000000000000000000\nexport ROLLUP_SEQUENCER_INITIAL_BLOCK_HEIGHT=418933\nexport ROLLUP_SEQUENCER_WEBSOCKET=wss://rpc.sequencer.dusk-1.devnet.astria.org/websocket\nexport ROLLUP_SEQUENCER_RPC=https://rpc.sequencer.dusk-1.devnet.astria.org\nexport ROLLUP_CELESTIA_FULL_NODE_URL=http://celestia-service:26658\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/88d7fd6a.4f5f47c1.js b/assets/js/88d7fd6a.4f5f47c1.js new file mode 100644 index 0000000..76244dd --- /dev/null +++ b/assets/js/88d7fd6a.4f5f47c1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[899],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var u=a.createContext({}),s=function(e){var t=a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=s(e.components);return a.createElement(u.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=s(n),m=r,k=c["".concat(u,".").concat(m)]||c[m]||d[m]||l;return n?a.createElement(k,o(o({ref:t},p),{},{components:n})):a.createElement(k,o({ref:t},p))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[c]="string"==typeof e?e:r,o[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const l={sidebar_position:2},o="Configure the Remote Rollup",i={unversionedId:"running-a-rollup-on-astria-dusknet/configure-remote-rollup",id:"running-a-rollup-on-astria-dusknet/configure-remote-rollup",title:"Configure the Remote Rollup",description:"Endpoints",source:"@site/docs/running-a-rollup-on-astria-dusknet/2-configure-remote-rollup.md",sourceDirName:"running-a-rollup-on-astria-dusknet",slug:"/running-a-rollup-on-astria-dusknet/configure-remote-rollup",permalink:"/docs/running-a-rollup-on-astria-dusknet/configure-remote-rollup",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/running-a-rollup-on-astria-dusknet/2-configure-remote-rollup.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docsSidebar",previous:{title:"Overview",permalink:"/docs/running-a-rollup-on-astria-dusknet/overview"},next:{title:"Local Rollup Deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment"}},u={},s=[{value:"Endpoints",id:"endpoints",level:2},{value:"Creating your own Genesis Account",id:"creating-your-own-genesis-account",level:2},{value:"Build the astria-cli",id:"build-the-astria-cli",level:2},{value:"Using the astria-cli",id:"using-the-astria-cli",level:2},{value:"Get Current Sequencer Block Height",id:"get-current-sequencer-block-height",level:3},{value:"Environment Variables + cli",id:"environment-variables--cli",level:2}],p={toc:s},c="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"configure-the-remote-rollup"},"Configure the Remote Rollup"),(0,r.kt)("h2",{id:"endpoints"},"Endpoints"),(0,r.kt)("p",null,"Endpoints for the remote cluster are the following:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"NAME (as helm creates)"),(0,r.kt)("th",{parentName:"tr",align:null},"HOSTS"),(0,r.kt)("th",{parentName:"tr",align:null},"ADDRESS"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"astria-ingress"),(0,r.kt)("td",{parentName:"tr",align:null},"rpc.evm.dusk-1.devnet.astria.org"),(0,r.kt)("td",{parentName:"tr",align:null},"34.160.214.22")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"blockscout-ingress"),(0,r.kt)("td",{parentName:"tr",align:null},"explorer.evm.dusk-1.devnet.astria.org"),(0,r.kt)("td",{parentName:"tr",align:null},"34.111.167.16")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"faucet-ingress"),(0,r.kt)("td",{parentName:"tr",align:null},"faucet.evm.dusk-1.devnet.astria.org"),(0,r.kt)("td",{parentName:"tr",align:null},"130.211.4.120")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"sequencer-faucet"),(0,r.kt)("td",{parentName:"tr",align:null},"faucet.sequencer.dusk-1.devnet.astria.org"),(0,r.kt)("td",{parentName:"tr",align:null},"34.36.8.102")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"sequencer-ingress"),(0,r.kt)("td",{parentName:"tr",align:null},"rpc.sequencer.dusk-1.devnet.astria.org"),(0,r.kt)("td",{parentName:"tr",align:null},"34.111.73.187")))),(0,r.kt)("h2",{id:"creating-your-own-genesis-account"},"Creating your own Genesis Account"),(0,r.kt)("p",null,"You can add genesis account(s) to your rollup during configuration.\nThis is done by ",(0,r.kt)("inlineCode",{parentName:"p"},"export"),"ing the additional ",(0,r.kt)("inlineCode",{parentName:"p"},"ROLLUP_GENESIS_ACCOUNTS")," environment variable."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_GENESIS_ACCOUNTS=:100000000000000000000\n")),(0,r.kt)("p",null,"You can create an account using"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cast w new\n")),(0,r.kt)("p",null,"to create a new account:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Successfully created new keypair.\nAddress: 0xfFe9...5f8b # \nPrivate key: 0x332e...a8fb # \n")),(0,r.kt)("p",null,"Set ",(0,r.kt)("inlineCode",{parentName:"p"},"")," to the address printed out from the new command, and\n",(0,r.kt)("inlineCode",{parentName:"p"},"export")," the private key to the env vars using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_FAUCET_PRIV_KEY=\n")),(0,r.kt)("p",null,"This export is also shown in the export block in the next section."),(0,r.kt)("admonition",{type:"danger"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"NEVER")," use a private key you use on a live network. "),(0,r.kt)("p",{parentName:"admonition"},"For ease of use we recommend you set this to an key which you have access to")),(0,r.kt)("h2",{id:"build-the-astria-cli"},"Build the ",(0,r.kt)("inlineCode",{parentName:"h2"},"astria-cli")),(0,r.kt)("p",null,"Clone the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main"},"Astria repo")," and build\na new config using the ",(0,r.kt)("inlineCode",{parentName:"p"},"astria-cli"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:astriaorg/astria.git\ncd astria\njust install-cli\n")),(0,r.kt)("h2",{id:"using-the-astria-cli"},"Using the ",(0,r.kt)("inlineCode",{parentName:"h2"},"astria-cli")),(0,r.kt)("h3",{id:"get-current-sequencer-block-height"},"Get Current Sequencer Block Height"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"astria-cli sequencer blockheight get \\\n --sequencer-url https://rpc.sequencer.dusk-1.devnet.astria.org/\n")),(0,r.kt)("p",null,"Keep track of this block height as it will be used for making the rollup config\nlater on. You will use this printed height in place of\n",(0,r.kt)("inlineCode",{parentName:"p"},"")," in the steps below."),(0,r.kt)("p",null,"Replace the following tags in the sections below, as follows:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Var Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Var Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"")),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"The name of your rollup")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"")),(0,r.kt)("td",{parentName:"tr",align:null},"u64"),(0,r.kt)("td",{parentName:"tr",align:null},"The id of your network")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"")),(0,r.kt)("td",{parentName:"tr",align:null},"u64"),(0,r.kt)("td",{parentName:"tr",align:null},"The height of the sequencer (found above)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"")),(0,r.kt)("td",{parentName:"tr",align:null},"[u8; 40]"),(0,r.kt)("td",{parentName:"tr",align:null},"A wallet address")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"")),(0,r.kt)("td",{parentName:"tr",align:null},"u64"),(0,r.kt)("td",{parentName:"tr",align:null},"A balance. It is useful to make this a large value.")))),(0,r.kt)("h2",{id:"environment-variables--cli"},"Environment Variables + cli"),(0,r.kt)("p",null,"You can use environment variables to set the configuration for the rollup\nconfig creation. Replace all the ",(0,r.kt)("inlineCode",{parentName:"p"},"<>")," tags with their corresponding values. "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_USE_TTY=true\nexport ROLLUP_LOG_LEVEL=DEBUG\nexport ROLLUP_NAME=\nexport ROLLUP_NETWORK_ID=\nexport ROLLUP_SKIP_EMPTY_BLOCKS=false\nexport ROLLUP_GENESIS_ACCOUNTS=:\nexport ROLLUP_SEQUENCER_INITIAL_BLOCK_HEIGHT=\nexport ROLLUP_SEQUENCER_WEBSOCKET=wss://rpc.sequencer.dusk-1.devnet.astria.org/websocket\nexport ROLLUP_SEQUENCER_RPC=https://rpc.sequencer.dusk-1.devnet.astria.org\n")),(0,r.kt)("p",null,"Then just run the config create command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"astria-cli rollup config create\n")),(0,r.kt)("p",null,"You can then run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"cat -rollup-conf.yaml\n")),(0,r.kt)("p",null,"to print out the config file contents to double check everything:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"config:\n useTTY: true\n logLevel: DEBUG\n rollup:\n name: \n chainId: # derived from rollup name\n networkId: \n skipEmptyBlocks: true\n genesisAccounts: \n - address: 0x\n balance: ''\n sequencer:\n initialBlockHeight: \n websocket: ws://rpc.sequencer.dusk-1.devnet.astria.org/websocket\n rpc: http://rpc.sequencer.dusk-1.devnet.astria.org\n celestia:\n fullNodeUrl: http://celestia-service:26658\n")),(0,r.kt)("p",null,"Export this file to the env vars as follows:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export ROLLUP_CONF_FILE=-rollup-conf.yaml\n")),(0,r.kt)("p",null,"At this point, if you do not want to add any genesis accounts to your rollup you\ncan move on to the next section."),(0,r.kt)("p",null,"If you do want to add an account(s), see the next section."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8d3194ed.5f75bb96.js b/assets/js/8d3194ed.5f75bb96.js deleted file mode 100644 index 27e187e..0000000 --- a/assets/js/8d3194ed.5f75bb96.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[936],{3905:(e,t,n)=>{n.d(t,{Zo:()=>i,kt:()=>f});var l=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=l.createContext({}),p=function(e){var t=l.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},i=function(e){var t=p(e.components);return l.createElement(c.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},m=l.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,i=u(e,["components","mdxType","originalType","parentName"]),s=p(n),m=r,f=s["".concat(c,".").concat(m)]||s[m]||d[m]||a;return n?l.createElement(f,o(o({ref:t},i),{},{components:n})):l.createElement(f,o({ref:t},i))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=m;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[s]="string"==typeof e?e:r,o[1]=u;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>u,toc:()=>p});var l=n(7462),r=(n(7294),n(3905));const a={sidebar_position:3},o="Running a Local Rollup",u={unversionedId:"dev-cluster/deploy-a-local-rollup",id:"dev-cluster/deploy-a-local-rollup",title:"Running a Local Rollup",description:"Faucet, Block Explorer, and Test Data",source:"@site/docs/dev-cluster/3-deploy-a-local-rollup.md",sourceDirName:"dev-cluster",slug:"/dev-cluster/deploy-a-local-rollup",permalink:"/docs/dev-cluster/deploy-a-local-rollup",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/dev-cluster/3-deploy-a-local-rollup.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docsSidebar",previous:{title:"Running the Dev Cluster Locally",permalink:"/docs/dev-cluster/run-dev-cluster-locally"},next:{title:"Run Multiple Rollups Locally",permalink:"/docs/dev-cluster/run-multiple-rollups-locally"}},c={},p=[{value:"Faucet, Block Explorer, and Test Data",id:"faucet-block-explorer-and-test-data",level:3}],i={toc:p},s="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(s,(0,l.Z)({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"running-a-local-rollup"},"Running a Local Rollup"),(0,r.kt)("h3",{id:"faucet-block-explorer-and-test-data"},"Faucet, Block Explorer, and Test Data"),(0,r.kt)("p",null,"With the dev-cluster running, you can then deploy a rollup, block explorer, and\nfaucet by running the following command in the terminal withing the dev-cluster:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"just deploy-rollup\n")),(0,r.kt)("p",null,"This ",(0,r.kt)("inlineCode",{parentName:"p"},"just")," command launches a local rollup, block explorer, and faucet using\nthe default in\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster/blob/main/helm/rollup/values.yaml"},"helm/rollup/values.yaml"),"\nin the ",(0,r.kt)("inlineCode",{parentName:"p"},"config.rollup")," definition."),(0,r.kt)("p",null,"For reference, these are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Rollup name: ",(0,r.kt)("inlineCode",{parentName:"li"},"astria")),(0,r.kt)("li",{parentName:"ul"},"Network Id: ",(0,r.kt)("inlineCode",{parentName:"li"},"912559"))),(0,r.kt)("p",null,"This will also take a moment as the rollup node, block explorer, and faucet spin\nup. You can check the progress of the deployment with the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get deployments --all-namespaces\n")),(0,r.kt)("p",null,"Or you can run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"just wait-for-rollup\n")),(0,r.kt)("p",null,"Once deployed, you can view the block explorer and faucet by opening a couple new windows in your browser and going to to the\nfollowing urls.\nFor the block explorer:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"http://blockscout.astria.localdev.me/\n")),(0,r.kt)("p",null,"For the faucet:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"http://faucet.astria.localdev.me/\n")),(0,r.kt)("p",null,"You can copy and paste a wallet address on the faucet page and give yourself 1 RIA. "),(0,r.kt)("p",null,"To test out the block explorer, open a terminal in the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria-web3/tree/main"},"astria-web3 repo")," you downloaded earlier and navigate to the ",(0,r.kt)("inlineCode",{parentName:"p"},"packages/evm-test-data/")," and run the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"just generate-transactions\n")),(0,r.kt)("p",null,"This command uses the default rollup name and network id (see above), and will\nsubmit commands to the newly deployed default rollup."),(0,r.kt)("p",null,"You can now go back to your browser and pull up the block explorer and you will now see blocks with transactions getting created in real time."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8d3194ed.eaf5d1f8.js b/assets/js/8d3194ed.eaf5d1f8.js new file mode 100644 index 0000000..512151b --- /dev/null +++ b/assets/js/8d3194ed.eaf5d1f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[936],{3905:(e,t,n)=>{n.d(t,{Zo:()=>i,kt:()=>k});var l=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function a(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=l.createContext({}),c=function(e){var t=l.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},i=function(e){var t=c(e.components);return l.createElement(p.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},m=l.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,i=u(e,["components","mdxType","originalType","parentName"]),s=c(n),m=r,k=s["".concat(p,".").concat(m)]||s[m]||d[m]||o;return n?l.createElement(k,a(a({ref:t},i),{},{components:n})):l.createElement(k,a({ref:t},i))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,a=new Array(o);a[0]=m;var u={};for(var p in t)hasOwnProperty.call(t,p)&&(u[p]=t[p]);u.originalType=e,u[s]="string"==typeof e?e:r,a[1]=u;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>c});var l=n(7462),r=(n(7294),n(3905));const o={sidebar_position:3},a="Running a Local Rollup",u={unversionedId:"dev-cluster/deploy-a-local-rollup",id:"dev-cluster/deploy-a-local-rollup",title:"Running a Local Rollup",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/dev-cluster/3-deploy-a-local-rollup.md",sourceDirName:"dev-cluster",slug:"/dev-cluster/deploy-a-local-rollup",permalink:"/docs/dev-cluster/deploy-a-local-rollup",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/dev-cluster/3-deploy-a-local-rollup.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docsSidebar",previous:{title:"Running the Dev Cluster Locally",permalink:"/docs/dev-cluster/run-dev-cluster-locally"},next:{title:"Run Multiple Rollups Locally",permalink:"/docs/dev-cluster/run-multiple-rollups-locally"}},p={},c=[{value:"Faucet, Block Explorer, and Test Data",id:"faucet-block-explorer-and-test-data",level:2}],i={toc:c},s="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(s,(0,l.Z)({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"running-a-local-rollup"},"Running a Local Rollup"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,r.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,r.kt)("h2",{id:"faucet-block-explorer-and-test-data"},"Faucet, Block Explorer, and Test Data"),(0,r.kt)("p",null,"With the dev-cluster running, you can then deploy a rollup, block explorer, and\nfaucet by running the following command in the terminal withing the dev-cluster:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"just deploy-rollup\n")),(0,r.kt)("p",null,"This ",(0,r.kt)("inlineCode",{parentName:"p"},"just")," command launches a local rollup, block explorer, and faucet using\nthe default in\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster/blob/main/helm/rollup/values.yaml"},"helm/rollup/values.yaml"),"\nin the ",(0,r.kt)("inlineCode",{parentName:"p"},"config.rollup")," definition."),(0,r.kt)("p",null,"For reference, these are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Rollup name: ",(0,r.kt)("inlineCode",{parentName:"li"},"astria")),(0,r.kt)("li",{parentName:"ul"},"Network Id: ",(0,r.kt)("inlineCode",{parentName:"li"},"912559"))),(0,r.kt)("p",null,"This will also take a moment as the rollup node, block explorer, and faucet spin\nup. You can check the progress of the deployment with the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get deployments --all-namespaces\n")),(0,r.kt)("p",null,"Or you can run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"just wait-for-rollup\n")),(0,r.kt)("p",null,"Once deployed, you can view the block explorer and faucet by opening a couple new windows in your browser and going to to the\nfollowing urls.\nFor the block explorer:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"http://blockscout.astria.localdev.me/\n")),(0,r.kt)("p",null,"For the faucet:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"http://faucet.astria.localdev.me/\n")),(0,r.kt)("p",null,"You can copy and paste a wallet address on the faucet page and give yourself 1 RIA. "),(0,r.kt)("p",null,"To test out the block explorer, open a terminal in the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria-web3/tree/main"},"astria-web3 repo")," you downloaded earlier and navigate to the ",(0,r.kt)("inlineCode",{parentName:"p"},"packages/evm-test-data/")," and run the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"just generate-transactions\n")),(0,r.kt)("p",null,"This command uses the default rollup name and network id (see above), and will\nsubmit commands to the newly deployed default rollup."),(0,r.kt)("p",null,"You can now go back to your browser and pull up the block explorer and you will now see blocks with transactions getting created in real time."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9171b866.05945466.js b/assets/js/9171b866.b4a18a53.js similarity index 55% rename from assets/js/9171b866.05945466.js rename to assets/js/9171b866.b4a18a53.js index 25332f4..1c09b0b 100644 --- a/assets/js/9171b866.05945466.js +++ b/assets/js/9171b866.b4a18a53.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[521],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>v});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({}),l=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=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},f="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),f=l(r),d=o,v=f["".concat(s,".").concat(d)]||f[d]||p[d]||a;return r?n.createElement(v,i(i({ref:t},u),{},{components:r})):n.createElement(v,i({ref:t},u))}));function v(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[f]="string"==typeof e?e:o,i[1]=c;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:2},i="Transaction Flow",c={unversionedId:"overview-of-astria/architecture/transaction-flow",id:"overview-of-astria/architecture/transaction-flow",title:"Transaction Flow",description:"The full transaction flow through the Astria stack is as follows:",source:"@site/docs/overview-of-astria/architecture/2-transaction-flow.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/transaction-flow",permalink:"/docs/overview-of-astria/architecture/transaction-flow",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/2-transaction-flow.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docsSidebar",previous:{title:"Architecture Overview",permalink:"/docs/overview-of-astria/architecture/overview"},next:{title:"Rollups",permalink:"/docs/overview-of-astria/architecture/rollup"}},s={},l=[],u={toc:l},f="wrapper";function p(e){let{components:t,...a}=e;return(0,o.kt)(f,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"transaction-flow"},"Transaction Flow"),(0,o.kt)("p",null,"The full transaction flow through the Astria stack is as follows:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Astria Transaction Flow",src:r(9902).Z,width:"3840",height:"2160"})))}p.isMDXComponent=!0},9902:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/transaction-flow-973616ae29eeb774eea19d9e5b5c3bc9.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[521],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>v});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({}),l=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=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=l(r),d=o,v=p["".concat(s,".").concat(d)]||p[d]||f[d]||a;return r?n.createElement(v,i(i({ref:t},u),{},{components:r})):n.createElement(v,i({ref:t},u))}));function v(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[p]="string"==typeof e?e:o,i[1]=c;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:2},i="Transaction Flow",c={unversionedId:"overview-of-astria/architecture/transaction-flow",id:"overview-of-astria/architecture/transaction-flow",title:"Transaction Flow",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/architecture/2-transaction-flow.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/transaction-flow",permalink:"/docs/overview-of-astria/architecture/transaction-flow",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/2-transaction-flow.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docsSidebar",previous:{title:"Architecture Overview",permalink:"/docs/overview-of-astria/architecture/overview"},next:{title:"Rollups",permalink:"/docs/overview-of-astria/architecture/rollup"}},s={},l=[],u={toc:l},p="wrapper";function f(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"transaction-flow"},"Transaction Flow"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,o.kt)("p",null,"The full transaction flow through the Astria stack is as follows:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Astria Transaction Flow",src:r(9902).Z,width:"3840",height:"2160"})))}f.isMDXComponent=!0},9902:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/transaction-flow-973616ae29eeb774eea19d9e5b5c3bc9.png"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.1883fc57.js b/assets/js/935f2afb.1883fc57.js deleted file mode 100644 index 37152c2..0000000 --- a/assets/js/935f2afb.1883fc57.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"category","label":"Overview of Astria","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Why Decentralized Sequencers?","href":"/docs/overview-of-astria/why-decentralized-sequencers","docId":"overview-of-astria/why-decentralized-sequencers"},{"type":"link","label":"Croll-Rollup Composability","href":"/docs/overview-of-astria/cross-rollup-composability","docId":"overview-of-astria/cross-rollup-composability"},{"type":"link","label":"Maintain Sovereignty","href":"/docs/overview-of-astria/maintain-sovereignty","docId":"overview-of-astria/maintain-sovereignty"},{"type":"category","label":"Architecture","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Transaction Flow","href":"/docs/overview-of-astria/architecture/transaction-flow","docId":"overview-of-astria/architecture/transaction-flow"},{"type":"link","label":"Rollups","href":"/docs/overview-of-astria/architecture/rollup","docId":"overview-of-astria/architecture/rollup"},{"type":"link","label":"Composer","href":"/docs/overview-of-astria/architecture/composer","docId":"overview-of-astria/architecture/composer"},{"type":"link","label":"The Astria Sequencer","href":"/docs/overview-of-astria/architecture/the-astria-sequencer","docId":"overview-of-astria/architecture/the-astria-sequencer"},{"type":"link","label":"Relayer","href":"/docs/overview-of-astria/architecture/relayer","docId":"overview-of-astria/architecture/relayer"},{"type":"link","label":"Conductor","href":"/docs/overview-of-astria/architecture/conductor","docId":"overview-of-astria/architecture/conductor"},{"type":"link","label":"Data Availability Layer","href":"/docs/overview-of-astria/architecture/data-availability-layer","docId":"overview-of-astria/architecture/data-availability-layer"}],"href":"/docs/overview-of-astria/architecture/overview"}],"href":"/docs/overview-of-astria/introduction"},{"type":"category","label":"Local Dev Cluster","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Running the Dev Cluster Locally","href":"/docs/dev-cluster/run-dev-cluster-locally","docId":"dev-cluster/run-dev-cluster-locally"},{"type":"link","label":"Running a Local Rollup","href":"/docs/dev-cluster/deploy-a-local-rollup","docId":"dev-cluster/deploy-a-local-rollup"},{"type":"link","label":"Run Multiple Rollups Locally","href":"/docs/dev-cluster/run-multiple-rollups-locally","docId":"dev-cluster/run-multiple-rollups-locally"},{"type":"link","label":"Shutting Down the Cluster","href":"/docs/dev-cluster/shutdown","docId":"dev-cluster/shutdown"}],"href":"/docs/dev-cluster/overview"},{"type":"category","label":"Running a rollup on Astria Dusknet","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configure the Remote Rollup","href":"/docs/running-a-rollup-on-astria-dusknet/configure-remote-rollup","docId":"running-a-rollup-on-astria-dusknet/configure-remote-rollup"},{"type":"link","label":"Local Rollup Deployment","href":"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment","docId":"running-a-rollup-on-astria-dusknet/local-rollup-deployment"},{"type":"link","label":"Remote Rollup Deployment","href":"/docs/running-a-rollup-on-astria-dusknet/remote-rollup-deployment","docId":"running-a-rollup-on-astria-dusknet/remote-rollup-deployment"}],"href":"/docs/running-a-rollup-on-astria-dusknet/overview"}]},"docs":{"dev-cluster/deploy-a-local-rollup":{"id":"dev-cluster/deploy-a-local-rollup","title":"Running a Local Rollup","description":"Faucet, Block Explorer, and Test Data","sidebar":"docsSidebar"},"dev-cluster/overview":{"id":"dev-cluster/overview","title":"Dev-Cluster Overview","description":"Astria\'s Shared Sequencer Network allows multiple rollups to share a single decentralized network of sequencers that\u2019s permissionless to join. This shared sequencer network provides out-of-the-box censorship resistance, fast block confirmations, and atomic cross-rollup inclusion guarantees.","sidebar":"docsSidebar"},"dev-cluster/run-dev-cluster-locally":{"id":"dev-cluster/run-dev-cluster-locally","title":"Running the Dev Cluster Locally","description":"Installation","sidebar":"docsSidebar"},"dev-cluster/run-multiple-rollups-locally":{"id":"dev-cluster/run-multiple-rollups-locally","title":"Run Multiple Rollups Locally","description":"At Astria we believe strongly that deploying a rollup should be as easy as deploying a smart contract. The dev-cluster shows this is indeed possible.","sidebar":"docsSidebar"},"dev-cluster/shutdown":{"id":"dev-cluster/shutdown","title":"Shutting Down the Cluster","description":"Deleting Specific Rollups","sidebar":"docsSidebar"},"overview-of-astria/architecture/composer":{"id":"overview-of-astria/architecture/composer","title":"Composer","description":"The Composer is an in-house abstraction over the potential actors in Astria\'s","sidebar":"docsSidebar"},"overview-of-astria/architecture/conductor":{"id":"overview-of-astria/architecture/conductor","title":"Conductor","description":"Conductor\'s role is to drive the deterministic execution of sequencer blocks to","sidebar":"docsSidebar"},"overview-of-astria/architecture/data-availability-layer":{"id":"overview-of-astria/architecture/data-availability-layer","title":"Data Availability Layer","description":"The dev-cluster uses Celestia as the data","sidebar":"docsSidebar"},"overview-of-astria/architecture/overview":{"id":"overview-of-astria/architecture/overview","title":"Architecture Overview","description":"At a high level, Astria breaks out all of the components that are historically","sidebar":"docsSidebar"},"overview-of-astria/architecture/relayer":{"id":"overview-of-astria/architecture/relayer","title":"Relayer","description":"The Relayer\'s responsibility is to take validated blocks from the sequencer and","sidebar":"docsSidebar"},"overview-of-astria/architecture/rollup":{"id":"overview-of-astria/architecture/rollup","title":"Rollups","description":"Astria is designed for permissionless rollup integration and takes advantage of lazy shared sequencing. This means that rollup developers have total sovereignty over their own execution state and can swap out sequencing layers without fear of being locked in. You do not need to ask for permission or go through a governance process to gain access. A rollup simply needs to satisfy the following interfaces:","sidebar":"docsSidebar"},"overview-of-astria/architecture/the-astria-sequencer":{"id":"overview-of-astria/architecture/the-astria-sequencer","title":"The Astria Sequencer","description":"The Astria Shared Sequencer is a decentralized network of nodes utilizing CometBFT that come to consensus on an ordered set of transactions (ie. it is a blockchain). The unique feature of the sequencer is that the transactions it includes are not executed (lazy sequencing), and are destined for another execution engine (ie. a rollup). This excludes \u201csequencer native\u201d transactions, such as transfers of tokens within the sequencer chain. Transactions from any given rollup are only ordered on the sequencer, not executed.","sidebar":"docsSidebar"},"overview-of-astria/architecture/transaction-flow":{"id":"overview-of-astria/architecture/transaction-flow","title":"Transaction Flow","description":"The full transaction flow through the Astria stack is as follows:","sidebar":"docsSidebar"},"overview-of-astria/cross-rollup-composability":{"id":"overview-of-astria/cross-rollup-composability","title":"Croll-Rollup Composability","description":"Because Astria handles the transaction ordering for multiple rollups, it\u2019s able to provide guarantees that transactions are only included as part of an atomic bundle. This allows users to specify that a transaction on Rollup A can be included in a block if and only if a different transaction on Rollup B is also included in the same block. By enabling such conditional transaction inclusion, Astria unlocks exciting possibilities such as atomic cross-rollup arbitrage.","sidebar":"docsSidebar"},"overview-of-astria/introduction":{"id":"overview-of-astria/introduction","title":"Introduction","description":"Astria is a shared sequencing network that allows many rollups to share a single","sidebar":"docsSidebar"},"overview-of-astria/maintain-sovereignty":{"id":"overview-of-astria/maintain-sovereignty","title":"Maintain Sovereignty","description":"Sovereignty is important, so rollups must be able to receive the benefits of","sidebar":"docsSidebar"},"overview-of-astria/why-decentralized-sequencers":{"id":"overview-of-astria/why-decentralized-sequencers","title":"Why Decentralized Sequencers?","description":"Centralization is antithetical to crypto. And yet, today\u2019s rollups almost universally depend on a single sequencer. Centralized sequencers provide fast transaction confirmations and reduce costs by batching and compressing transactions. However, these benefits come at the cost of relying on a single trusted actor for liveness and censorship resistance.","sidebar":"docsSidebar"},"running-a-rollup-on-astria-dusknet/configure-remote-rollup":{"id":"running-a-rollup-on-astria-dusknet/configure-remote-rollup","title":"Configure the Remote Rollup","description":"Endpoints","sidebar":"docsSidebar"},"running-a-rollup-on-astria-dusknet/local-rollup-deployment":{"id":"running-a-rollup-on-astria-dusknet/local-rollup-deployment","title":"Local Rollup Deployment","description":"Deploy the Local Run Environment","sidebar":"docsSidebar"},"running-a-rollup-on-astria-dusknet/overview":{"id":"running-a-rollup-on-astria-dusknet/overview","title":"Overview","description":"After running the Astria stack locally, the next step is to run a rollup against","sidebar":"docsSidebar"},"running-a-rollup-on-astria-dusknet/remote-rollup-deployment":{"id":"running-a-rollup-on-astria-dusknet/remote-rollup-deployment","title":"Remote Rollup Deployment","description":"Creating a Rollup on Digital Ocean K8s","sidebar":"docsSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.210a43f7.js b/assets/js/935f2afb.210a43f7.js new file mode 100644 index 0000000..8969449 --- /dev/null +++ b/assets/js/935f2afb.210a43f7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"category","label":"Running a rollup on Astria Dusknet","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configure the Remote Rollup","href":"/docs/running-a-rollup-on-astria-dusknet/configure-remote-rollup","docId":"running-a-rollup-on-astria-dusknet/configure-remote-rollup"},{"type":"link","label":"Local Rollup Deployment","href":"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment","docId":"running-a-rollup-on-astria-dusknet/local-rollup-deployment"},{"type":"link","label":"Remote Rollup Deployment","href":"/docs/running-a-rollup-on-astria-dusknet/remote-rollup-deployment","docId":"running-a-rollup-on-astria-dusknet/remote-rollup-deployment"}],"href":"/docs/running-a-rollup-on-astria-dusknet/overview"},{"type":"category","label":"Overview of Astria","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Why Decentralized Sequencers?","href":"/docs/overview-of-astria/why-decentralized-sequencers","docId":"overview-of-astria/why-decentralized-sequencers"},{"type":"link","label":"Cross-Rollup Composability","href":"/docs/overview-of-astria/cross-rollup-composability","docId":"overview-of-astria/cross-rollup-composability"},{"type":"link","label":"Maintain Sovereignty","href":"/docs/overview-of-astria/maintain-sovereignty","docId":"overview-of-astria/maintain-sovereignty"},{"type":"category","label":"Architecture","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Transaction Flow","href":"/docs/overview-of-astria/architecture/transaction-flow","docId":"overview-of-astria/architecture/transaction-flow"},{"type":"link","label":"Rollups","href":"/docs/overview-of-astria/architecture/rollup","docId":"overview-of-astria/architecture/rollup"},{"type":"link","label":"Composer","href":"/docs/overview-of-astria/architecture/composer","docId":"overview-of-astria/architecture/composer"},{"type":"link","label":"The Astria Sequencer","href":"/docs/overview-of-astria/architecture/the-astria-sequencer","docId":"overview-of-astria/architecture/the-astria-sequencer"},{"type":"link","label":"Relayer","href":"/docs/overview-of-astria/architecture/relayer","docId":"overview-of-astria/architecture/relayer"},{"type":"link","label":"Conductor","href":"/docs/overview-of-astria/architecture/conductor","docId":"overview-of-astria/architecture/conductor"},{"type":"link","label":"Data Availability Layer","href":"/docs/overview-of-astria/architecture/data-availability-layer","docId":"overview-of-astria/architecture/data-availability-layer"}],"href":"/docs/overview-of-astria/architecture/overview"}],"href":"/docs/overview-of-astria/introduction"},{"type":"category","label":"Local Dev Cluster","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Running the Dev Cluster Locally","href":"/docs/dev-cluster/run-dev-cluster-locally","docId":"dev-cluster/run-dev-cluster-locally"},{"type":"link","label":"Running a Local Rollup","href":"/docs/dev-cluster/deploy-a-local-rollup","docId":"dev-cluster/deploy-a-local-rollup"},{"type":"link","label":"Run Multiple Rollups Locally","href":"/docs/dev-cluster/run-multiple-rollups-locally","docId":"dev-cluster/run-multiple-rollups-locally"},{"type":"link","label":"Shutting Down the Cluster","href":"/docs/dev-cluster/shutdown","docId":"dev-cluster/shutdown"}],"href":"/docs/dev-cluster/overview"}]},"docs":{"dev-cluster/deploy-a-local-rollup":{"id":"dev-cluster/deploy-a-local-rollup","title":"Running a Local Rollup","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"dev-cluster/overview":{"id":"dev-cluster/overview","title":"Dev-Cluster Overview","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"dev-cluster/run-dev-cluster-locally":{"id":"dev-cluster/run-dev-cluster-locally","title":"Running the Dev Cluster Locally","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"dev-cluster/run-multiple-rollups-locally":{"id":"dev-cluster/run-multiple-rollups-locally","title":"Run Multiple Rollups Locally","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"dev-cluster/shutdown":{"id":"dev-cluster/shutdown","title":"Shutting Down the Cluster","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/architecture/composer":{"id":"overview-of-astria/architecture/composer","title":"Composer","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/architecture/conductor":{"id":"overview-of-astria/architecture/conductor","title":"Conductor","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/architecture/data-availability-layer":{"id":"overview-of-astria/architecture/data-availability-layer","title":"Data Availability Layer","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/architecture/overview":{"id":"overview-of-astria/architecture/overview","title":"Architecture Overview","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/architecture/relayer":{"id":"overview-of-astria/architecture/relayer","title":"Relayer","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/architecture/rollup":{"id":"overview-of-astria/architecture/rollup","title":"Rollups","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/architecture/the-astria-sequencer":{"id":"overview-of-astria/architecture/the-astria-sequencer","title":"The Astria Sequencer","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/architecture/transaction-flow":{"id":"overview-of-astria/architecture/transaction-flow","title":"Transaction Flow","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/cross-rollup-composability":{"id":"overview-of-astria/cross-rollup-composability","title":"Cross-Rollup Composability","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/introduction":{"id":"overview-of-astria/introduction","title":"Introduction","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/maintain-sovereignty":{"id":"overview-of-astria/maintain-sovereignty","title":"Maintain Sovereignty","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"overview-of-astria/why-decentralized-sequencers":{"id":"overview-of-astria/why-decentralized-sequencers","title":"Why Decentralized Sequencers?","description":"To deploy your own rollup on the Astria Dusknet devnet, check out the","sidebar":"docsSidebar"},"running-a-rollup-on-astria-dusknet/configure-remote-rollup":{"id":"running-a-rollup-on-astria-dusknet/configure-remote-rollup","title":"Configure the Remote Rollup","description":"Endpoints","sidebar":"docsSidebar"},"running-a-rollup-on-astria-dusknet/local-rollup-deployment":{"id":"running-a-rollup-on-astria-dusknet/local-rollup-deployment","title":"Local Rollup Deployment","description":"Deploy the Local Run Environment","sidebar":"docsSidebar"},"running-a-rollup-on-astria-dusknet/overview":{"id":"running-a-rollup-on-astria-dusknet/overview","title":"Overview","description":"After running the Astria stack locally, the next step is to run a rollup against","sidebar":"docsSidebar"},"running-a-rollup-on-astria-dusknet/remote-rollup-deployment":{"id":"running-a-rollup-on-astria-dusknet/remote-rollup-deployment","title":"Remote Rollup Deployment","description":"The following assumes you are using [Digital Ocean Kubernetes","sidebar":"docsSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/94d4bf4c.3afb3d3e.js b/assets/js/94d4bf4c.3afb3d3e.js new file mode 100644 index 0000000..b478d0d --- /dev/null +++ b/assets/js/94d4bf4c.3afb3d3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>v});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=a.createContext({}),s=function(e){var t=a.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},y=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=s(r),y=n,v=p["".concat(c,".").concat(y)]||p[y]||d[y]||i;return r?a.createElement(v,o(o({ref:t},u),{},{components:r})):a.createElement(v,o({ref:t},u))}));function v(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=y;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[p]="string"==typeof e?e:n,o[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var a=r(7462),n=(r(7294),r(3905));const i={sidebar_position:8},o="Data Availability Layer",l={unversionedId:"overview-of-astria/architecture/data-availability-layer",id:"overview-of-astria/architecture/data-availability-layer",title:"Data Availability Layer",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/architecture/8-data-availability-layer.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/data-availability-layer",permalink:"/docs/overview-of-astria/architecture/data-availability-layer",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/8-data-availability-layer.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"docsSidebar",previous:{title:"Conductor",permalink:"/docs/overview-of-astria/architecture/conductor"},next:{title:"Dev-Cluster Overview",permalink:"/docs/dev-cluster/overview"}},c={},s=[],u={toc:s},p="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"data-availability-layer"},"Data Availability Layer"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,n.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,n.kt)("p",null,"The dev-cluster uses ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/celestiaorg"},"Celestia")," as the data\navailability layer and is the ultimate destination of all data that has been\nordered by the sequencer network. Once written to Celestia, the transaction\norder is considered final and it is where all data will be pulled from when a\nnew rollup node is spun up."),(0,n.kt)("p",null,"See the ",(0,n.kt)("a",{parentName:"p",href:"https://celestia.org/what-is-celestia/"},"Celestia website")," for a more\nin depth introduction."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/94d4bf4c.c51f31d6.js b/assets/js/94d4bf4c.c51f31d6.js deleted file mode 100644 index ae7c170..0000000 --- a/assets/js/94d4bf4c.c51f31d6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>v});var a=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var c=a.createContext({}),s=function(e){var t=a.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},u=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var r=e.components,i=e.mdxType,n=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=s(r),f=i,v=p["".concat(c,".").concat(f)]||p[f]||d[f]||n;return r?a.createElement(v,o(o({ref:t},u),{},{components:r})):a.createElement(v,o({ref:t},u))}));function v(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=r.length,o=new Array(n);o[0]=f;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[p]="string"==typeof e?e:i,o[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>l,toc:()=>s});var a=r(7462),i=(r(7294),r(3905));const n={sidebar_position:8},o="Data Availability Layer",l={unversionedId:"overview-of-astria/architecture/data-availability-layer",id:"overview-of-astria/architecture/data-availability-layer",title:"Data Availability Layer",description:"The dev-cluster uses Celestia as the data",source:"@site/docs/overview-of-astria/architecture/8-data-availability-layer.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/data-availability-layer",permalink:"/docs/overview-of-astria/architecture/data-availability-layer",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/8-data-availability-layer.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"docsSidebar",previous:{title:"Conductor",permalink:"/docs/overview-of-astria/architecture/conductor"},next:{title:"Dev-Cluster Overview",permalink:"/docs/dev-cluster/overview"}},c={},s=[],u={toc:s},p="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(p,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"data-availability-layer"},"Data Availability Layer"),(0,i.kt)("p",null,"The dev-cluster uses ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/celestiaorg"},"Celestia")," as the data\navailability layer and is the ultimate destination of all data that has been\nordered by the sequencer network. Once written to Celestia, the transaction\norder is considered final and it is where all data will be pulled from when a\nnew rollup node is spun up."),(0,i.kt)("p",null,"See the ",(0,i.kt)("a",{parentName:"p",href:"https://celestia.org/what-is-celestia/"},"Celestia website")," for a more\nin depth introduction."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9f0ae38a.2dc9401d.js b/assets/js/9f0ae38a.2dc9401d.js new file mode 100644 index 0000000..08f26a5 --- /dev/null +++ b/assets/js/9f0ae38a.2dc9401d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[934],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,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({}),u=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=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=u(r),h=a,m=p["".concat(s,".").concat(h)]||p[h]||d[h]||o;return r?n.createElement(m,i(i({ref:t},c),{},{components:r})):n.createElement(m,i({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:a,i[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:1},i="Overview",l={unversionedId:"running-a-rollup-on-astria-dusknet/overview",id:"running-a-rollup-on-astria-dusknet/overview",title:"Overview",description:"After running the Astria stack locally, the next step is to run a rollup against",source:"@site/docs/running-a-rollup-on-astria-dusknet/1-overview.md",sourceDirName:"running-a-rollup-on-astria-dusknet",slug:"/running-a-rollup-on-astria-dusknet/overview",permalink:"/docs/running-a-rollup-on-astria-dusknet/overview",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/running-a-rollup-on-astria-dusknet/1-overview.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docsSidebar",next:{title:"Configure the Remote Rollup",permalink:"/docs/running-a-rollup-on-astria-dusknet/configure-remote-rollup"}},s={},u=[],c={toc:u},p="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"overview"},"Overview"),(0,a.kt)("p",null,"After running the Astria stack locally, the next step is to run a rollup against\nthe remote Astria network."),(0,a.kt)("p",null,"The primary difference between running a local rollup and one that targets the\nremote devnet, is the configuration of the rollup and creating an account for\nthe Sequencer."),(0,a.kt)("p",null,"As before with running a local dev-cluster, you will need to have the\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster/tree/main"},"dev-cluster")," and the main\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria"},"astria repo")," cloned and on your machine,\nand also have the following dependencies installed:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Foundry Cast and Forge tools - ",(0,a.kt)("a",{parentName:"li",href:"https://book.getfoundry.sh/getting-started/installation"},"https://book.getfoundry.sh/getting-started/installation")),(0,a.kt)("li",{parentName:"ul"},"docker - ",(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/get-docker/"},"https://docs.docker.com/get-docker/")),(0,a.kt)("li",{parentName:"ul"},"kubectl - ",(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/docs/tasks/tools/"},"https://kubernetes.io/docs/tasks/tools/")),(0,a.kt)("li",{parentName:"ul"},"helm - ",(0,a.kt)("a",{parentName:"li",href:"https://helm.sh/docs/intro/install/"},"https://helm.sh/docs/intro/install/")),(0,a.kt)("li",{parentName:"ul"},"kind - ",(0,a.kt)("a",{parentName:"li",href:"https://kind.sigs.k8s.io/docs/user/quick-start/#installation"},"https://kind.sigs.k8s.io/docs/user/quick-start/#installation")),(0,a.kt)("li",{parentName:"ul"},"just - ",(0,a.kt)("a",{parentName:"li",href:"https://just.systems/man/en/chapter_4.html"},"https://just.systems/man/en/chapter_4.html"))),(0,a.kt)("p",null,"Many of these dependencies are also required for running the local dev-cluster."),(0,a.kt)("p",null,"For reference, the latest component releases that the devnet cluster is running are the\nfollowing:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/astriaorg/astria/releases/tag/v0.7.0--conductor"},"conductor v0.7.0")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/astriaorg/astria/releases/tag/v0.2.2--composer"},"composer v0.2.2")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/astriaorg/astria/releases/tag/v0.5.1--sequencer-relayer"},"sequencer-relayer v0.5.1")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/astriaorg/astria/releases/tag/v0.4.1--sequencer"},"sequencer\nv0.4.1"))),(0,a.kt)("p",null,"You do not need to download these independently, they are already within the\ndev-cluster repo."),(0,a.kt)("p",null,"Once all of the dependencies have been installed, you can move on to running the\nrollup."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9f0ae38a.d8d4e09f.js b/assets/js/9f0ae38a.d8d4e09f.js deleted file mode 100644 index e3a7b15..0000000 --- a/assets/js/9f0ae38a.d8d4e09f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[934],{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 l(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({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="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=i(e,["components","mdxType","originalType","parentName"]),p=u(r),m=a,h=p["".concat(s,".").concat(m)]||p[m]||d[m]||o;return r?n.createElement(h,l(l({ref:t},c),{},{components:r})):n.createElement(h,l({ref:t},c))}));function h(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:a,l[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:1},l="Overview",i={unversionedId:"running-a-rollup-on-astria-dusknet/overview",id:"running-a-rollup-on-astria-dusknet/overview",title:"Overview",description:"After running the Astria stack locally, the next step is to run a rollup against",source:"@site/docs/running-a-rollup-on-astria-dusknet/1-overview.md",sourceDirName:"running-a-rollup-on-astria-dusknet",slug:"/running-a-rollup-on-astria-dusknet/overview",permalink:"/docs/running-a-rollup-on-astria-dusknet/overview",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/running-a-rollup-on-astria-dusknet/1-overview.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docsSidebar",previous:{title:"Shutting Down the Cluster",permalink:"/docs/dev-cluster/shutdown"},next:{title:"Configure the Remote Rollup",permalink:"/docs/running-a-rollup-on-astria-dusknet/configure-remote-rollup"}},s={},u=[],c={toc:u},p="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"overview"},"Overview"),(0,a.kt)("p",null,"After running the Astria stack locally, the next step is to run a rollup against\nthe remote Astria network."),(0,a.kt)("p",null,"The primary difference between running a local rollup and one that targets the\nremote devnet, is the configuration of the rollup and creating an account for\nthe Sequencer."),(0,a.kt)("p",null,"As before with running a local dev-cluster, you will need to have the\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/dev-cluster/tree/main"},"dev-cluster")," and the main\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria"},"astria repo")," cloned and on your machine,\nas well have the following dependencies installed:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://cloud.google.com/sdk/docs/install"},"gcloud cli")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://book.getfoundry.sh/getting-started/installation"},"Foundry Cast and Forge tools")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/get-docker/"},"docker")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/docs/tasks/tools/"},"kubectl")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://helm.sh/docs/intro/install/"},"helm")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kind.sigs.k8s.io/docs/user/quick-start/#installation"},"kind")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://just.systems/man/en/chapter_4.html"},"just")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://curl.se/"},"curl")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://jqlang.github.io/jq/"},"jq"))),(0,a.kt)("p",null,"Many of these dependencies are also required for running the local dev-cluster."),(0,a.kt)("p",null,"For reference, the latest component releases that the devnet cluster is running are the\nfollowing:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/astriaorg/astria/releases/tag/v0.6.0--conductor"},"conductor v0.6.0")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/astriaorg/astria/releases/tag/v0.2.1--composer"},"composer v0.2.1")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/astriaorg/astria/releases/tag/v0.5.1--sequencer-relayer"},"sequencer-relayer v0.5.1")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/astriaorg/astria/releases/tag/v0.4.1--sequencer"},"sequencer\nv0.4.1"))),(0,a.kt)("p",null,"Once all of the dependencies have been installed, you can move on to running the\nrollup."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a22447f8.e46a597e.js b/assets/js/a22447f8.80414789.js similarity index 53% rename from assets/js/a22447f8.e46a597e.js rename to assets/js/a22447f8.80414789.js index d0ff10e..650f86d 100644 --- a/assets/js/a22447f8.e46a597e.js +++ b/assets/js/a22447f8.80414789.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[956],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(r),f=o,m=p["".concat(c,".").concat(f)]||p[f]||d[f]||i;return r?n.createElement(m,a(a({ref:t},u),{},{components:r})):n.createElement(m,a({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:o,a[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={sidebar_position:1},a="Introduction",s={unversionedId:"overview-of-astria/introduction",id:"overview-of-astria/introduction",title:"Introduction",description:"Astria is a shared sequencing network that allows many rollups to share a single",source:"@site/docs/overview-of-astria/1-introduction.md",sourceDirName:"overview-of-astria",slug:"/overview-of-astria/introduction",permalink:"/docs/overview-of-astria/introduction",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/1-introduction.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docsSidebar",next:{title:"Why Decentralized Sequencers?",permalink:"/docs/overview-of-astria/why-decentralized-sequencers"}},c={},l=[],u={toc:l},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"introduction"},"Introduction"),(0,o.kt)("p",null,"Astria is a shared sequencing network that allows many rollups to share a single\ndecentralized network of sequencers. These sequencers are simple and\npermissionless to join, completely replacing centralized sequencers."),(0,o.kt)("p",null,"This shared sequencer network provides out-of-the-box censorship resistance,\nfast block confirmations, and atomic cross-rollup composability \u2013 all while\nretaining each rollup\u2019s sovereignty.\nAstria envisions a future where thousands of decentralized rollups\nflourish, each one tailored to meet the unique requirements of different\nindustries, applications, and use cases. "),(0,o.kt)("p",null,"To achieve this vision, we believe that\ndeploying an economically secure, decentralized, and censorship-resistant rollup\nshould be as easy as deploying a smart contract. "),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria"},"Astria repo here.")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[956],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(r),f=o,m=p["".concat(c,".").concat(f)]||p[f]||d[f]||i;return r?n.createElement(m,a(a({ref:t},u),{},{components:r})):n.createElement(m,a({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:o,a[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={sidebar_position:1},a="Introduction",s={unversionedId:"overview-of-astria/introduction",id:"overview-of-astria/introduction",title:"Introduction",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/1-introduction.md",sourceDirName:"overview-of-astria",slug:"/overview-of-astria/introduction",permalink:"/docs/overview-of-astria/introduction",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/1-introduction.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docsSidebar",previous:{title:"Remote Rollup Deployment",permalink:"/docs/running-a-rollup-on-astria-dusknet/remote-rollup-deployment"},next:{title:"Why Decentralized Sequencers?",permalink:"/docs/overview-of-astria/why-decentralized-sequencers"}},c={},l=[],u={toc:l},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"introduction"},"Introduction"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,o.kt)("p",null,"Astria is a shared sequencing network that allows many rollups to share a single\ndecentralized network of sequencers. These sequencers are simple and\npermissionless to join, completely replacing centralized sequencers."),(0,o.kt)("p",null,"This shared sequencer network provides out-of-the-box censorship resistance,\nfast block confirmations, and atomic cross-rollup composability \u2013 all while\nretaining each rollup\u2019s sovereignty.\nAstria envisions a future where thousands of decentralized rollups\nflourish, each one tailored to meet the unique requirements of different\nindustries, applications, and use cases. "),(0,o.kt)("p",null,"To achieve this vision, we believe that\ndeploying an economically secure, decentralized, and censorship-resistant rollup\nshould be as easy as deploying a smart contract. "),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria"},"Astria repo here.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a2bc7f68.8b13d4ce.js b/assets/js/a2bc7f68.8b13d4ce.js deleted file mode 100644 index 1409ce5..0000000 --- a/assets/js/a2bc7f68.8b13d4ce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[111],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),d=o,h=u["".concat(l,".").concat(d)]||u[d]||m[d]||i;return r?n.createElement(h,a(a({ref:t},p),{},{components:r})):n.createElement(h,a({ref:t},p))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,a[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const i={sidebar_position:4},a="Composer",s={unversionedId:"overview-of-astria/architecture/composer",id:"overview-of-astria/architecture/composer",title:"Composer",description:"The Composer is an in-house abstraction over the potential actors in Astria's",source:"@site/docs/overview-of-astria/architecture/4-composer.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/composer",permalink:"/docs/overview-of-astria/architecture/composer",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/4-composer.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"docsSidebar",previous:{title:"Rollups",permalink:"/docs/overview-of-astria/architecture/rollup"},next:{title:"The Astria Sequencer",permalink:"/docs/overview-of-astria/architecture/the-astria-sequencer"}},l={},c=[],p={toc:c},u="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"composer"},"Composer"),(0,o.kt)("p",null,"The Composer is an in-house abstraction over the potential actors in Astria's\nMEV supply chain. It currently contains a naive implementations of the role a\nsearcher will fulfill, with the intention of having working examples that\neconomically incentivized third parties can use as a starting point for their\nown implementations. As we progress from design to implementation of Astria's\nproposer-builder separation it will also include an example implementation of a\nnaive builder. The abstractions serves the goal of acting as a forcing function\non our architecture design by stubbing out the roles and requiring other\ncomponents to interact with them through an interface."),(0,o.kt)("p",null,"While a real searcher implementation would create profit-generating bundles of rollup transactions and submit them to a builder, the Composer implementation simply bundles every rollup transaction it receives into a sequencer transaction and submits it to the sequencer. As our approach to proposer-builder separation is still in its design phase, there is currently no explicit builder role in the MEV supply chain and transactions are submitted directly to validator nodes' CometBFT mempool."),(0,o.kt)("p",null,"Once Astria's block builder design moves to its implementation phase, the Composer will include a reference builder implementation as well. Similarly to the searcher, while a real builder implementation would run a profit-generating auction, the composer implementation will simply run a FIFO queue that will add all the sequencer transactions it receives and submits a block to the sequencer's proposer."),(0,o.kt)("p",null,"Once Astria's block builder design moves to its implementation phase, the Composer will include a reference builder implementation as well. Similarly to the searcher, while a real builder implementation would run a profit-generating auction, the composer implementation will simply run a FIFO queue that will add all the sequencer transactions it receives and submits a block to the sequencer's proposer."),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main/crates/astria-conductor"},"Conductor code\nhere.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a2bc7f68.b512857f.js b/assets/js/a2bc7f68.b512857f.js new file mode 100644 index 0000000..f0f7891 --- /dev/null +++ b/assets/js/a2bc7f68.b512857f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[111],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),d=o,h=u["".concat(l,".").concat(d)]||u[d]||m[d]||i;return r?n.createElement(h,a(a({ref:t},p),{},{components:r})):n.createElement(h,a({ref:t},p))}));function h(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,a[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const i={sidebar_position:4},a="Composer",s={unversionedId:"overview-of-astria/architecture/composer",id:"overview-of-astria/architecture/composer",title:"Composer",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/architecture/4-composer.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/composer",permalink:"/docs/overview-of-astria/architecture/composer",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/4-composer.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"docsSidebar",previous:{title:"Rollups",permalink:"/docs/overview-of-astria/architecture/rollup"},next:{title:"The Astria Sequencer",permalink:"/docs/overview-of-astria/architecture/the-astria-sequencer"}},l={},c=[],p={toc:c},u="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"composer"},"Composer"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,o.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,o.kt)("p",null,"The Composer is an in-house abstraction over the potential actors in Astria's\nMEV supply chain. It currently contains a naive implementations of the role a\nsearcher will fulfill, with the intention of having working examples that\neconomically incentivized third parties can use as a starting point for their\nown implementations. As we progress from design to implementation of Astria's\nproposer-builder separation it will also include an example implementation of a\nnaive builder. The abstractions serves the goal of acting as a forcing function\non our architecture design by stubbing out the roles and requiring other\ncomponents to interact with them through an interface."),(0,o.kt)("p",null,"While a real searcher implementation would create profit-generating bundles of rollup transactions and submit them to a builder, the Composer implementation simply bundles every rollup transaction it receives into a sequencer transaction and submits it to the sequencer. As our approach to proposer-builder separation is still in its design phase, there is currently no explicit builder role in the MEV supply chain and transactions are submitted directly to validator nodes' CometBFT mempool."),(0,o.kt)("p",null,"Once Astria's block builder design moves to its implementation phase, the Composer will include a reference builder implementation as well. Similarly to the searcher, while a real builder implementation would run a profit-generating auction, the composer implementation will simply run a FIFO queue that will add all the sequencer transactions it receives and submits a block to the sequencer's proposer."),(0,o.kt)("p",null,"Once Astria's block builder design moves to its implementation phase, the Composer will include a reference builder implementation as well. Similarly to the searcher, while a real builder implementation would run a profit-generating auction, the composer implementation will simply run a FIFO queue that will add all the sequencer transactions it receives and submits a block to the sequencer's proposer."),(0,o.kt)("p",null,"See the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main/crates/astria-conductor"},"Conductor code\nhere.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b2019779.9704e073.js b/assets/js/b2019779.9704e073.js deleted file mode 100644 index 7fe3aa0..0000000 --- a/assets/js/b2019779.9704e073.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[582],{3905:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>y});var o=t(7294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var r=1;r=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),l=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},u=function(e){var r=l(e.components);return o.createElement(s.Provider,{value:r},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},d=o.forwardRef((function(e,r){var t=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=l(t),d=a,y=p["".concat(s,".").concat(d)]||p[d]||f[d]||n;return t?o.createElement(y,i(i({ref:r},u),{},{components:t})):o.createElement(y,i({ref:r},u))}));function y(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var n=t.length,i=new Array(n);i[0]=d;var c={};for(var s in r)hasOwnProperty.call(r,s)&&(c[s]=r[s]);c.originalType=e,c[p]="string"==typeof e?e:a,i[1]=c;for(var l=2;l{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>i,default:()=>f,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var o=t(7462),a=(t(7294),t(3905));const n={sidebar_position:6},i="Relayer",c={unversionedId:"overview-of-astria/architecture/relayer",id:"overview-of-astria/architecture/relayer",title:"Relayer",description:"The Relayer's responsibility is to take validated blocks from the sequencer and",source:"@site/docs/overview-of-astria/architecture/6-relayer.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/relayer",permalink:"/docs/overview-of-astria/architecture/relayer",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/6-relayer.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"docsSidebar",previous:{title:"The Astria Sequencer",permalink:"/docs/overview-of-astria/architecture/the-astria-sequencer"},next:{title:"Conductor",permalink:"/docs/overview-of-astria/architecture/conductor"}},s={},l=[],u={toc:l},p="wrapper";function f(e){let{components:r,...t}=e;return(0,a.kt)(p,(0,o.Z)({},u,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"relayer"},"Relayer"),(0,a.kt)("p",null,"The Relayer's responsibility is to take validated blocks from the sequencer and\npass them along to both the Conductor and the DA layer. Because the sequencer's\nblock times are much faster than those of the DA, the relayer also collects a\nqueue of ordered sequencer blocks before wrapping them for submission to DA."),(0,a.kt)("p",null,"The individual sequencer blocks are sent immediately to the Conductor to enable\nfast finality for an improved UX and also act as soft commits for the execution\nlayer. The collections of blocks sent to the DA layer are used as a source of\ntruth and are ultimately pulled from the DA to be used as firm commits for\nfinality in the rolllups."),(0,a.kt)("p",null,"See the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main/crates/astria-sequencer-relayer"},"Relayer code\nhere.")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b2019779.ea21475d.js b/assets/js/b2019779.ea21475d.js new file mode 100644 index 0000000..f2d1332 --- /dev/null +++ b/assets/js/b2019779.ea21475d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[582],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>y});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),l=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return o.createElement(s.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=l(r),d=n,y=p["".concat(s,".").concat(d)]||p[d]||f[d]||a;return r?o.createElement(y,i(i({ref:t},u),{},{components:r})):o.createElement(y,i({ref:t},u))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[p]="string"==typeof e?e:n,i[1]=c;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var o=r(7462),n=(r(7294),r(3905));const a={sidebar_position:6},i="Relayer",c={unversionedId:"overview-of-astria/architecture/relayer",id:"overview-of-astria/architecture/relayer",title:"Relayer",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/architecture/6-relayer.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/relayer",permalink:"/docs/overview-of-astria/architecture/relayer",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/6-relayer.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"docsSidebar",previous:{title:"The Astria Sequencer",permalink:"/docs/overview-of-astria/architecture/the-astria-sequencer"},next:{title:"Conductor",permalink:"/docs/overview-of-astria/architecture/conductor"}},s={},l=[],u={toc:l},p="wrapper";function f(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"relayer"},"Relayer"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,n.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,n.kt)("p",null,"The Relayer's responsibility is to take validated blocks from the sequencer and\npass them along to both the Conductor and the DA layer. Because the sequencer's\nblock times are much faster than those of the DA, the relayer also collects a\nqueue of ordered sequencer blocks before wrapping them for submission to DA."),(0,n.kt)("p",null,"The individual sequencer blocks are sent immediately to the Conductor to enable\nfast finality for an improved UX and also act as soft commits for the execution\nlayer. The collections of blocks sent to the DA layer are used as a source of\ntruth and are ultimately pulled from the DA to be used as firm commits for\nfinality in the rolllups."),(0,n.kt)("p",null,"See the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria/tree/main/crates/astria-sequencer-relayer"},"Relayer code\nhere.")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d4497d8e.68a2fd3b.js b/assets/js/d4497d8e.68a2fd3b.js deleted file mode 100644 index df692d9..0000000 --- a/assets/js/d4497d8e.68a2fd3b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[593],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var o=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function n(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var c=o.createContext({}),l=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):n(n({},t),e)),r},u=function(e){var t=l(e.components);return o.createElement(c.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(r),h=i,d=p["".concat(c,".").concat(h)]||p[h]||f[h]||a;return r?o.createElement(d,n(n({ref:t},u),{},{components:r})):o.createElement(d,n({ref:t},u))}));function d(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,n=new Array(a);n[0]=h;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:i,n[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>n,default:()=>f,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var o=r(7462),i=(r(7294),r(3905));const a={sidebar_position:1},n="Architecture Overview",s={unversionedId:"overview-of-astria/architecture/overview",id:"overview-of-astria/architecture/overview",title:"Architecture Overview",description:"At a high level, Astria breaks out all of the components that are historically",source:"@site/docs/overview-of-astria/architecture/1-overview.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/overview",permalink:"/docs/overview-of-astria/architecture/overview",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/1-overview.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docsSidebar",previous:{title:"Maintain Sovereignty",permalink:"/docs/overview-of-astria/maintain-sovereignty"},next:{title:"Transaction Flow",permalink:"/docs/overview-of-astria/architecture/transaction-flow"}},c={},l=[],u={toc:l},p="wrapper";function f(e){let{components:t,...a}=e;return(0,i.kt)(p,(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"architecture-overview"},"Architecture Overview"),(0,i.kt)("p",null,"At a high level, Astria breaks out all of the components that are historically\ncombined together in monolithic blockchains into individual components. This\nresults in a modular ecosystem that allows users to swap out components to fit\ntheir specific needs."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Astria Architecture",src:r(7655).Z,width:"3840",height:"2160"})),(0,i.kt)("p",null,"Given this architecture, rollups can retrieve blocks from Astria immediately after they\u2019re created, without waiting for the base layer to include them. The economic weight of Astria\u2019s decentralized sequencer set provides confidence that this transaction order is final. This \u201csoft commitment\u201d allows rollups to provide their end users with fast block confirmations. Alternatively, rollups can wait for blocks to be included by the base layer, giving them the strongest finality. All transactions still get this \u201cfirm commitment\u201d at the speed of the base layer, fast pre-confirmations are just an additional feature that Astria provides to rollups if they choose to use it."),(0,i.kt)("p",null,"To generate a new state root, a rollup\u2019s full nodes retrieve a block from either\nAstria or the base layer, check it against Astria\u2019s fork choice rule, filter out\ntransactions from other rollups, and apply the resultant subset of transactions\nto their previous state. Headers can then be generated from this state root and\ngossiped to light clients. Rollups of this style are termed \u2018Lazy Rollups\u2019, a\nnod to the ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Lazy_evaluation?ref=blog.astria.org"},"Lazy\nEvaluation"),"\nprinciple found in programming language theory."),(0,i.kt)("p",null,"See the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria"},"Astria repo here.")))}f.isMDXComponent=!0},7655:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/astria-architecture-b0f845ed5b779ba19c5e3d2e9278068b.png"}}]); \ No newline at end of file diff --git a/assets/js/d4497d8e.e35d2712.js b/assets/js/d4497d8e.e35d2712.js new file mode 100644 index 0000000..5c3be21 --- /dev/null +++ b/assets/js/d4497d8e.e35d2712.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[593],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var o=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var c=o.createContext({}),l=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=l(e.components);return o.createElement(c.Provider,{value:t},e.children)},p="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,i=e.mdxType,n=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(r),f=i,d=p["".concat(c,".").concat(f)]||p[f]||h[f]||n;return r?o.createElement(d,a(a({ref:t},u),{},{components:r})):o.createElement(d,a({ref:t},u))}));function d(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=r.length,a=new Array(n);a[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:i,a[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var o=r(7462),i=(r(7294),r(3905));const n={sidebar_position:1},a="Architecture Overview",s={unversionedId:"overview-of-astria/architecture/overview",id:"overview-of-astria/architecture/overview",title:"Architecture Overview",description:"To deploy your own rollup on the Astria Dusknet devnet, check out the",source:"@site/docs/overview-of-astria/architecture/1-overview.md",sourceDirName:"overview-of-astria/architecture",slug:"/overview-of-astria/architecture/overview",permalink:"/docs/overview-of-astria/architecture/overview",draft:!1,editUrl:"https://github.com/astriaorg/docs/docs/overview-of-astria/architecture/1-overview.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docsSidebar",previous:{title:"Maintain Sovereignty",permalink:"/docs/overview-of-astria/maintain-sovereignty"},next:{title:"Transaction Flow",permalink:"/docs/overview-of-astria/architecture/transaction-flow"}},c={},l=[],u={toc:l},p="wrapper";function h(e){let{components:t,...n}=e;return(0,i.kt)(p,(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"architecture-overview"},"Architecture Overview"),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"To deploy your own rollup on the Astria Dusknet devnet, check out the\n",(0,i.kt)("a",{parentName:"p",href:"/docs/running-a-rollup-on-astria-dusknet/overview/"},"instructions here"),"!")),(0,i.kt)("p",null,"At a high level, Astria breaks out all of the components that are historically\ncombined together in monolithic blockchains into individual components. This\nresults in a modular ecosystem that allows users to swap out components to fit\ntheir specific needs."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Astria Architecture",src:r(7655).Z,width:"3840",height:"2160"})),(0,i.kt)("p",null,"Given this architecture, rollups can retrieve blocks from Astria immediately after they\u2019re created, without waiting for the base layer to include them. The economic weight of Astria\u2019s decentralized sequencer set provides confidence that this transaction order is final. This \u201csoft commitment\u201d allows rollups to provide their end users with fast block confirmations. Alternatively, rollups can wait for blocks to be included by the base layer, giving them the strongest finality. All transactions still get this \u201cfirm commitment\u201d at the speed of the base layer, fast pre-confirmations are just an additional feature that Astria provides to rollups if they choose to use it."),(0,i.kt)("p",null,"To generate a new state root, a rollup\u2019s full nodes retrieve a block from either\nAstria or the base layer, check it against Astria\u2019s fork choice rule, filter out\ntransactions from other rollups, and apply the resultant subset of transactions\nto their previous state. Headers can then be generated from this state root and\ngossiped to light clients. Rollups of this style are termed \u2018Lazy Rollups\u2019, a\nnod to the ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Lazy_evaluation?ref=blog.astria.org"},"Lazy\nEvaluation"),"\nprinciple found in programming language theory."),(0,i.kt)("p",null,"See the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/astriaorg/astria"},"Astria repo here.")))}h.isMDXComponent=!0},7655:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/astria-architecture-b0f845ed5b779ba19c5e3d2e9278068b.png"}}]); \ No newline at end of file diff --git a/assets/js/main.0747c18b.js b/assets/js/main.0747c18b.js deleted file mode 100644 index a21cfe7..0000000 --- a/assets/js/main.0747c18b.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.0747c18b.js.LICENSE.txt */ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"0b52e64f":[()=>n.e(167).then(n.bind(n,5909)),"@site/docs/dev-cluster/2-run-dev-cluster-locally.md",5909],17896441:[()=>Promise.all([n.e(532),n.e(455),n.e(918)]).then(n.bind(n,903)),"@theme/DocItem",903],"1be78505":[()=>Promise.all([n.e(532),n.e(514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1df93b7f":[()=>Promise.all([n.e(532),n.e(237)]).then(n.bind(n,8391)),"@site/src/pages/index.tsx",8391],"1f391b9e":[()=>Promise.all([n.e(532),n.e(455),n.e(85)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"22085d9f":[()=>n.e(940).then(n.bind(n,8396)),"@site/docs/overview-of-astria/architecture/5-the-astria-sequencer.md",8396],"247783bb":[()=>n.e(334).then(n.t.bind(n,3769,19)),"/home/runner/work/docs/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],25349772:[()=>n.e(28).then(n.bind(n,2479)),"@site/docs/overview-of-astria/3-cross-rollup-composability.md",2479],"28ec242d":[()=>n.e(241).then(n.bind(n,2452)),"@site/docs/dev-cluster/1-overview.md",2452],"33cb50ef":[()=>n.e(309).then(n.bind(n,123)),"@site/docs/overview-of-astria/4-maintain-sovereignty.md",123],"3756debb":[()=>n.e(110).then(n.bind(n,7090)),"@site/docs/overview-of-astria/2-why-decentralized-sequencers.md",7090],"39034b90":[()=>n.e(823).then(n.bind(n,5644)),"@site/docs/overview-of-astria/architecture/3-rollup.md",5644],"393be207":[()=>n.e(414).then(n.bind(n,3123)),"@site/src/pages/markdown-page.md",3123],"3c203bfa":[()=>n.e(792).then(n.bind(n,2952)),"@site/docs/running-a-rollup-on-astria-dusknet/4-remote-rollup-deployment.md",2952],"48680bfc":[()=>n.e(32).then(n.bind(n,6606)),"@site/docs/dev-cluster/4-run-multiple-rollups-locally.md",6606],"57be9303":[()=>n.e(531).then(n.bind(n,7882)),"@site/docs/dev-cluster/5-shutdown.md",7882],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6ff8e36b":[()=>n.e(494).then(n.bind(n,2123)),"@site/docs/overview-of-astria/architecture/7-conductor.md",2123],"7227b5a9":[()=>n.e(603).then(n.bind(n,6978)),"@site/docs/running-a-rollup-on-astria-dusknet/3-local-rollup-deployment.md",6978],"88d7fd6a":[()=>n.e(899).then(n.bind(n,2968)),"@site/docs/running-a-rollup-on-astria-dusknet/2-configure-remote-rollup.md",2968],"8d3194ed":[()=>n.e(936).then(n.bind(n,8002)),"@site/docs/dev-cluster/3-deploy-a-local-rollup.md",8002],"9171b866":[()=>n.e(521).then(n.bind(n,8818)),"@site/docs/overview-of-astria/architecture/2-transaction-flow.md",8818],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"94d4bf4c":[()=>n.e(5).then(n.bind(n,4556)),"@site/docs/overview-of-astria/architecture/8-data-availability-layer.md",4556],"9f0ae38a":[()=>n.e(934).then(n.bind(n,6366)),"@site/docs/running-a-rollup-on-astria-dusknet/1-overview.md",6366],a22447f8:[()=>n.e(956).then(n.bind(n,9512)),"@site/docs/overview-of-astria/1-introduction.md",9512],a2bc7f68:[()=>n.e(111).then(n.bind(n,6390)),"@site/docs/overview-of-astria/architecture/4-composer.md",6390],a7434565:[()=>n.e(645).then(n.t.bind(n,5745,19)),"/home/runner/work/docs/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],b2019779:[()=>n.e(582).then(n.bind(n,1123)),"@site/docs/overview-of-astria/architecture/6-relayer.md",1123],d4497d8e:[()=>n.e(593).then(n.bind(n,3771)),"@site/docs/overview-of-astria/architecture/1-overview.md",3771]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],h=(0,c.Z)(o);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/markdown-page/",component:f("/markdown-page/","fc3"),exact:!0},{path:"/docs/",component:f("/docs/","f06"),routes:[{path:"/docs/dev-cluster/deploy-a-local-rollup/",component:f("/docs/dev-cluster/deploy-a-local-rollup/","770"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/dev-cluster/overview/",component:f("/docs/dev-cluster/overview/","446"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/dev-cluster/run-dev-cluster-locally/",component:f("/docs/dev-cluster/run-dev-cluster-locally/","861"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/dev-cluster/run-multiple-rollups-locally/",component:f("/docs/dev-cluster/run-multiple-rollups-locally/","541"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/dev-cluster/shutdown/",component:f("/docs/dev-cluster/shutdown/","f13"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/architecture/composer/",component:f("/docs/overview-of-astria/architecture/composer/","d42"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/architecture/conductor/",component:f("/docs/overview-of-astria/architecture/conductor/","36f"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/architecture/data-availability-layer/",component:f("/docs/overview-of-astria/architecture/data-availability-layer/","8ac"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/architecture/overview/",component:f("/docs/overview-of-astria/architecture/overview/","c7f"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/architecture/relayer/",component:f("/docs/overview-of-astria/architecture/relayer/","52b"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/architecture/rollup/",component:f("/docs/overview-of-astria/architecture/rollup/","e66"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/architecture/the-astria-sequencer/",component:f("/docs/overview-of-astria/architecture/the-astria-sequencer/","c94"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/architecture/transaction-flow/",component:f("/docs/overview-of-astria/architecture/transaction-flow/","2e0"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/cross-rollup-composability/",component:f("/docs/overview-of-astria/cross-rollup-composability/","cbc"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/introduction/",component:f("/docs/overview-of-astria/introduction/","2c7"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/maintain-sovereignty/",component:f("/docs/overview-of-astria/maintain-sovereignty/","01a"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview-of-astria/why-decentralized-sequencers/",component:f("/docs/overview-of-astria/why-decentralized-sequencers/","f55"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/running-a-rollup-on-astria-dusknet/configure-remote-rollup/",component:f("/docs/running-a-rollup-on-astria-dusknet/configure-remote-rollup/","94d"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment/",component:f("/docs/running-a-rollup-on-astria-dusknet/local-rollup-deployment/","938"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/running-a-rollup-on-astria-dusknet/overview/",component:f("/docs/running-a-rollup-on-astria-dusknet/overview/","52e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/running-a-rollup-on-astria-dusknet/remote-rollup-deployment/",component:f("/docs/running-a-rollup-on-astria-dusknet/remote-rollup-deployment/","42b"),exact:!0,sidebar:"docsSidebar"}]},{path:"/",component:f("/","39f"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),h=n(2263),g=n(4996),v=n(6668),b=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),a=function(){const{siteConfig:{url:e}}=(0,h.Z)(),{pathname:t}=(0,c.TH)();return e+(0,g.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,v.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(E.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const _=new Map;function T(e){if(_.has(e.pathname))return{...e,pathname:_.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return _.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return _.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),L=n(8940);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),R("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class P extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const D=P,I="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function j(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${I}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

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

\n

We suggest trying baseUrl =

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