From 4cee66de30a588a8658fff018484912aae408d79 Mon Sep 17 00:00:00 2001 From: smartprogrammer93 Date: Wed, 22 Jan 2025 11:43:08 +0000 Subject: [PATCH] deploy: c075dd41ffdf1a2228ca7452daae35e8dcbf1f34 --- 404.html | 4 ++-- assets/js/{01900813.50400a3a.js => 01900813.7e87daff.js} | 2 +- assets/js/{0cff9a71.1bb40dd2.js => 0cff9a71.335621f8.js} | 2 +- assets/js/{0e384e19.085f5d0c.js => 0e384e19.31c4fb85.js} | 2 +- assets/js/{25fd459b.ea8fda03.js => 25fd459b.ba2c5a22.js} | 2 +- assets/js/{2dd7e07d.1a0604ae.js => 2dd7e07d.0a6cac2e.js} | 2 +- assets/js/{3021cf83.320b30bd.js => 3021cf83.211a9e09.js} | 2 +- assets/js/{43c4bd28.a63db757.js => 43c4bd28.221d2848.js} | 2 +- assets/js/{4848ee62.9215d490.js => 4848ee62.c516d13c.js} | 2 +- assets/js/{6925427d.8d0b7495.js => 6925427d.fe521144.js} | 2 +- assets/js/{70229f88.190c55b4.js => 70229f88.0fea5e0d.js} | 2 +- assets/js/{7bab19c9.aea566bc.js => 7bab19c9.f6fcf2af.js} | 2 +- assets/js/{995c0dc6.7c2c854c.js => 995c0dc6.f9c950a9.js} | 2 +- assets/js/{997f3e03.b5704c9b.js => 997f3e03.aeaffdf5.js} | 2 +- assets/js/{abff299a.b2a64bb7.js => abff299a.2c844f20.js} | 2 +- assets/js/{ad528f71.426073a6.js => ad528f71.852c549c.js} | 2 +- assets/js/{c60f1aa1.ea657486.js => c60f1aa1.1c6b50fa.js} | 2 +- assets/js/{cffb26af.7413fc4b.js => cffb26af.3cf46576.js} | 2 +- assets/js/{d58cd8b1.3a6e21bc.js => d58cd8b1.ed4ec15f.js} | 2 +- assets/js/{da6537e0.8a2aa45d.js => da6537e0.5b94336d.js} | 2 +- assets/js/{main.0254d61f.js => main.b25b22bf.js} | 4 ++-- ...54d61f.js.LICENSE.txt => main.b25b22bf.js.LICENSE.txt} | 0 assets/js/runtime~main.649fad9f.js | 1 - assets/js/runtime~main.d12a9b06.js | 1 + docs/Guides/deploy-bridge-ui.html | 6 +++--- docs/Guides/deploy-l1-protocols.html | 6 +++--- docs/Guides/deploy-l1.html | 6 +++--- docs/Guides/deploy-l2-protocols.html | 6 +++--- docs/Guides/deploy-l2.html | 6 +++--- docs/Guides/deploy-relay.html | 6 +++--- docs/Guides/provers.html | 6 +++--- docs/Guides/provers/risc0-prover.html | 6 +++--- docs/Guides/provers/sgx-prover.html | 6 +++--- docs/Guides/provers/sp1-prover.html | 6 +++--- docs/Troubleshooting.html | 6 +++--- docs/Troubleshooting/common-issues.html | 6 +++--- docs/Troubleshooting/error-codes.html | 6 +++--- docs/core-concepts.html | 6 +++--- docs/core-concepts/bridging.html | 6 +++--- docs/core-concepts/proposing.html | 6 +++--- docs/core-concepts/sequencing.html | 6 +++--- docs/getting-started.html | 6 +++--- docs/intro.html | 8 ++++---- index.html | 4 ++-- markdown-page.html | 4 ++-- 45 files changed, 86 insertions(+), 86 deletions(-) rename assets/js/{01900813.50400a3a.js => 01900813.7e87daff.js} (98%) rename assets/js/{0cff9a71.1bb40dd2.js => 0cff9a71.335621f8.js} (99%) rename assets/js/{0e384e19.085f5d0c.js => 0e384e19.31c4fb85.js} (74%) rename assets/js/{25fd459b.ea8fda03.js => 25fd459b.ba2c5a22.js} (96%) rename assets/js/{2dd7e07d.1a0604ae.js => 2dd7e07d.0a6cac2e.js} (99%) rename assets/js/{3021cf83.320b30bd.js => 3021cf83.211a9e09.js} (98%) rename assets/js/{43c4bd28.a63db757.js => 43c4bd28.221d2848.js} (99%) rename assets/js/{4848ee62.9215d490.js => 4848ee62.c516d13c.js} (98%) rename assets/js/{6925427d.8d0b7495.js => 6925427d.fe521144.js} (99%) rename assets/js/{70229f88.190c55b4.js => 70229f88.0fea5e0d.js} (97%) rename assets/js/{7bab19c9.aea566bc.js => 7bab19c9.f6fcf2af.js} (99%) rename assets/js/{995c0dc6.7c2c854c.js => 995c0dc6.f9c950a9.js} (99%) rename assets/js/{997f3e03.b5704c9b.js => 997f3e03.aeaffdf5.js} (99%) rename assets/js/{abff299a.b2a64bb7.js => abff299a.2c844f20.js} (98%) rename assets/js/{ad528f71.426073a6.js => ad528f71.852c549c.js} (98%) rename assets/js/{c60f1aa1.ea657486.js => c60f1aa1.1c6b50fa.js} (98%) rename assets/js/{cffb26af.7413fc4b.js => cffb26af.3cf46576.js} (99%) rename assets/js/{d58cd8b1.3a6e21bc.js => d58cd8b1.ed4ec15f.js} (99%) rename assets/js/{da6537e0.8a2aa45d.js => da6537e0.5b94336d.js} (97%) rename assets/js/{main.0254d61f.js => main.b25b22bf.js} (99%) rename assets/js/{main.0254d61f.js.LICENSE.txt => main.b25b22bf.js.LICENSE.txt} (100%) delete mode 100644 assets/js/runtime~main.649fad9f.js create mode 100644 assets/js/runtime~main.d12a9b06.js diff --git a/404.html b/404.html index 01501d5..f5f150c 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@ Page Not Found | Documentation - - + +
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.

diff --git a/assets/js/01900813.50400a3a.js b/assets/js/01900813.7e87daff.js similarity index 98% rename from assets/js/01900813.50400a3a.js rename to assets/js/01900813.7e87daff.js index 89d8c55..9767407 100644 --- a/assets/js/01900813.50400a3a.js +++ b/assets/js/01900813.7e87daff.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[77],{9893:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var r=i(4848),o=i(8453);const s={sidebar_position:3},t="Block Proposer Guide",c={id:"core-concepts/sequencing",title:"Block Proposer Guide",description:"In Surge, anyone can act as a block proposer, being responsible for processing transactions and managing block production on the L2 network. This guide explains how block proposing works and its fee structure.",source:"@site/docs/core-concepts/sequencing.mdx",sourceDirName:"core-concepts",slug:"/core-concepts/sequencing",permalink:"/docs/core-concepts/sequencing",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/core-concepts/sequencing.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Prover Setup",permalink:"/docs/core-concepts/proposing"},next:{title:"Deploy L1",permalink:"/docs/Guides/deploy-l1"}},l={},a=[{value:"Overview",id:"overview",level:2},{value:"Fee Structure",id:"fee-structure",level:2},{value:"Base Fee Distribution",id:"base-fee-distribution",level:3},{value:"Priority Fees",id:"priority-fees",level:3},{value:"Fee Components",id:"fee-components",level:3},{value:"Block Production",id:"block-production",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Advanced Features",id:"advanced-features",level:2}];function d(e){const n={admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"block-proposer-guide",children:"Block Proposer Guide"})}),"\n",(0,r.jsx)(n.p,{children:"In Surge, anyone can act as a block proposer, being responsible for processing transactions and managing block production on the L2 network. This guide explains how block proposing works and its fee structure."}),"\n",(0,r.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(n.p,{children:"Block proposers:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Order and execute user transactions"}),"\n",(0,r.jsx)(n.li,{children:"Manage block production"}),"\n",(0,r.jsx)(n.li,{children:"Handle fee distribution"}),"\n",(0,r.jsx)(n.li,{children:"Maintain L2 chain efficiency"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fee-structure",children:"Fee Structure"}),"\n",(0,r.jsx)(n.h3,{id:"base-fee-distribution",children:"Base Fee Distribution"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"75% goes to the coinbase address"}),"\n",(0,r.jsx)(n.li,{children:"25% goes to the treasury"}),"\n",(0,r.jsx)(n.li,{children:"Distribution is handled through the proving mechanism"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"priority-fees",children:"Priority Fees"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"100% of priority fees go to the coinbase"}),"\n",(0,r.jsx)(n.li,{children:"Proposers can provide additional tips during block proposal on L1"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"fee-components",children:"Fee Components"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Base Fee"}),": Automatically adjusted based on network congestion"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Priority Fee"}),": Optional tip to incentivize faster inclusion"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Extra Tips"}),": Additional proposer incentives for L2 PBS (Proposer Builder Separation)"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"Fee distribution is built into the proving mechanism rather than handled by smart contracts."})}),"\n",(0,r.jsx)(n.h2,{id:"block-production",children:"Block Production"}),"\n",(0,r.jsx)(n.p,{children:"Block proposers manage block production with the following parameters:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Configurable target gas per block"}),"\n",(0,r.jsx)(n.li,{children:"Adjustable base fee calculations"}),"\n",(0,r.jsx)(n.li,{children:"Flexible fee distribution ratios"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"Block proposers can adjust various parameters including:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Target gas limits"}),"\n",(0,r.jsx)(n.li,{children:"Fee sharing percentages"}),"\n",(0,r.jsx)(n.li,{children:"Block production rates"}),"\n",(0,r.jsx)(n.li,{children:"Priority fee minimums"}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Always monitor system metrics when adjusting block proposer parameters to maintain optimal performance."})}),"\n",(0,r.jsx)(n.h2,{id:"advanced-features",children:"Advanced Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Custom executor implementation"}),"\n",(0,r.jsx)(n.li,{children:"Configurable base fee sharing"}),"\n",(0,r.jsx)(n.li,{children:"Support for proposer builder separation"}),"\n",(0,r.jsx)(n.li,{children:"Flexible treasury management"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"For detailed technical specifications and deployment instructions, please contact the Surge team."})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>c});var r=i(6540);const o={},s=r.createContext(o);function t(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[77],{9893:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var r=i(4848),o=i(8453);const s={sidebar_position:3},t="Block Proposer Guide",c={id:"core-concepts/sequencing",title:"Block Proposer Guide",description:"In Surge, anyone can act as a block proposer, being responsible for processing transactions and managing block production on the L2 network. This guide explains how block proposing works and its fee structure.",source:"@site/docs/core-concepts/sequencing.mdx",sourceDirName:"core-concepts",slug:"/core-concepts/sequencing",permalink:"/docs/core-concepts/sequencing",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/core-concepts/sequencing.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Prover Setup",permalink:"/docs/core-concepts/proposing"},next:{title:"Deploy L1",permalink:"/docs/Guides/deploy-l1"}},l={},a=[{value:"Overview",id:"overview",level:2},{value:"Fee Structure",id:"fee-structure",level:2},{value:"Base Fee Distribution",id:"base-fee-distribution",level:3},{value:"Priority Fees",id:"priority-fees",level:3},{value:"Fee Components",id:"fee-components",level:3},{value:"Block Production",id:"block-production",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Advanced Features",id:"advanced-features",level:2}];function d(e){const n={admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"block-proposer-guide",children:"Block Proposer Guide"})}),"\n",(0,r.jsx)(n.p,{children:"In Surge, anyone can act as a block proposer, being responsible for processing transactions and managing block production on the L2 network. This guide explains how block proposing works and its fee structure."}),"\n",(0,r.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(n.p,{children:"Block proposers:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Order and execute user transactions"}),"\n",(0,r.jsx)(n.li,{children:"Manage block production"}),"\n",(0,r.jsx)(n.li,{children:"Handle fee distribution"}),"\n",(0,r.jsx)(n.li,{children:"Maintain L2 chain efficiency"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fee-structure",children:"Fee Structure"}),"\n",(0,r.jsx)(n.h3,{id:"base-fee-distribution",children:"Base Fee Distribution"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"75% goes to the coinbase address"}),"\n",(0,r.jsx)(n.li,{children:"25% goes to the treasury"}),"\n",(0,r.jsx)(n.li,{children:"Distribution is handled through the proving mechanism"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"priority-fees",children:"Priority Fees"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"100% of priority fees go to the coinbase"}),"\n",(0,r.jsx)(n.li,{children:"Proposers can provide additional tips during block proposal on L1"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"fee-components",children:"Fee Components"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Base Fee"}),": Automatically adjusted based on network congestion"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Priority Fee"}),": Optional tip to incentivize faster inclusion"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Extra Tips"}),": Additional proposer incentives for L2 PBS (Proposer Builder Separation)"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"Fee distribution is built into the proving mechanism rather than handled by smart contracts."})}),"\n",(0,r.jsx)(n.h2,{id:"block-production",children:"Block Production"}),"\n",(0,r.jsx)(n.p,{children:"Block proposers manage block production with the following parameters:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Configurable target gas per block"}),"\n",(0,r.jsx)(n.li,{children:"Adjustable base fee calculations"}),"\n",(0,r.jsx)(n.li,{children:"Flexible fee distribution ratios"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"Block proposers can adjust various parameters including:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Target gas limits"}),"\n",(0,r.jsx)(n.li,{children:"Fee sharing percentages"}),"\n",(0,r.jsx)(n.li,{children:"Block production rates"}),"\n",(0,r.jsx)(n.li,{children:"Priority fee minimums"}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Always monitor system metrics when adjusting block proposer parameters to maintain optimal performance."})}),"\n",(0,r.jsx)(n.h2,{id:"advanced-features",children:"Advanced Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Custom executor implementation"}),"\n",(0,r.jsx)(n.li,{children:"Configurable base fee sharing"}),"\n",(0,r.jsx)(n.li,{children:"Support for proposer builder separation"}),"\n",(0,r.jsx)(n.li,{children:"Flexible treasury management"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"For detailed technical specifications and deployment instructions, please contact the Surge team."})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>c});var r=i(6540);const o={},s=r.createContext(o);function t(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0cff9a71.1bb40dd2.js b/assets/js/0cff9a71.335621f8.js similarity index 99% rename from assets/js/0cff9a71.1bb40dd2.js rename to assets/js/0cff9a71.335621f8.js index 0c76e57..355032d 100644 --- a/assets/js/0cff9a71.1bb40dd2.js +++ b/assets/js/0cff9a71.335621f8.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[154],{4456:(e,n,l)=>{l.r(n),l.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>o});var s=l(4848),i=l(8453);const r={sidebar_position:3},a="Deploy SP1 Prover",t={id:"Guides/provers/sp1-prover",title:"Deploy SP1 Prover",description:"Prerequisites",source:"@site/docs/Guides/provers/sp1-prover.mdx",sourceDirName:"Guides/provers",slug:"/Guides/provers/sp1-prover",permalink:"/docs/Guides/provers/sp1-prover",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/provers/sp1-prover.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Deploy RISC0 Prover",permalink:"/docs/Guides/provers/risc0-prover"},next:{title:"Deploy L2",permalink:"/docs/Guides/deploy-l2"}},c={},o=[{value:"Prerequisites",id:"prerequisites",level:3},{value:"Overview",id:"overview",level:2},{value:"Install Docker",id:"install-docker",level:2},{value:"Allow Running Docker Without sudo",id:"allow-running-docker-without-sudo",level:4},{value:"Install Rust",id:"install-rust",level:2},{value:"Install sccache",id:"install-sccache",level:2},{value:"Install gcc-12",id:"install-gcc-12",level:2},{value:"Install g++-12",id:"install-g-12",level:2},{value:"Install openssl",id:"install-openssl",level:2},{value:"Install package-config",id:"install-package-config",level:2},{value:"Uninstall Existing CUDA (optional)",id:"uninstall-existing-cuda-optional",level:2},{value:"Uninstall a Toolkit runfile installation",id:"uninstall-a-toolkit-runfile-installation",level:3},{value:"Steps to Uninstall CUDA",id:"steps-to-uninstall-cuda",level:3},{value:"Install CUDA",id:"install-cuda",level:2},{value:"Installing with Apt",id:"installing-with-apt",level:3},{value:"Configuring Docker",id:"configuring-docker",level:3},{value:"Pull Raiko",id:"pull-raiko",level:2},{value:"Install Raiko with SP1",id:"install-raiko-with-sp1",level:2},{value:"Build SP1 Program",id:"build-sp1-program",level:2},{value:"Setup Program VK Key for the SP1 Verifier Contract",id:"setup-program-vk-key-for-the-sp1-verifier-contract",level:2},{value:"Set Chain Spec",id:"set-chain-spec",level:2},{value:"Build Raiko",id:"build-raiko",level:2},{value:"Run Raiko",id:"run-raiko",level:2},{value:"Check Logs",id:"check-logs",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"deploy-sp1-prover",children:"Deploy SP1 Prover"})}),"\n",(0,s.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Machine with CUDA support"}),"\n",(0,s.jsx)(n.li,{children:"L1 Accounts with funds (One for the Prover, One for Prover Registry)"}),"\n",(0,s.jsx)(n.li,{children:"L1 RPC URL"}),"\n",(0,s.jsx)(n.li,{children:"L1 Account Private Key"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(n.p,{children:["Set up Docker, CUDA, CUDA Container Toolkit and other dependencies to run SP1 prover on an x86 machine.\nFor more information, refer to the ",(0,s.jsx)(n.a,{href:"https://docs.succinct.xyz/introduction.html",children:(0,s.jsx)(n.strong,{children:"Succinct Documentation"})}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"install-docker",children:"Install Docker"}),"\n",(0,s.jsxs)(n.p,{children:["Follow the ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/engine/install/ubuntu/",children:"official Docker documentation"})," for installation steps."]}),"\n",(0,s.jsxs)(n.h4,{id:"allow-running-docker-without-sudo",children:["Allow Running Docker Without ",(0,s.jsx)(n.code,{children:"sudo"})]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Add your user to the ",(0,s.jsx)(n.code,{children:"docker"})," group:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo usermod -aG docker $USER\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Apply the changes to the user group:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"newgrp docker\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Verify that Docker works without sudo:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker ps\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"install-rust",children:"Install Rust"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsudo reboot\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-sccache",children:"Install sccache"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cargo install sccache\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-gcc-12",children:"Install gcc-12"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt install gcc-12\ncd /usr/bin\nsudo rm gcc\nsudo ln -s gcc-12 gcc\ngcc --version\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-g-12",children:"Install g++-12"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt install g++-12\nsudo rm g++\nsudo ln -s g++-12 g++\ng++ --version\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-openssl",children:"Install openssl"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get install libssl-dev\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-package-config",children:"Install package-config"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt install pkg-config\n"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"uninstall-existing-cuda-optional",children:"Uninstall Existing CUDA (optional)"}),"\n",(0,s.jsxs)(n.p,{children:["Reference: ",(0,s.jsx)(n.a,{href:"https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#handle-conflicting-installation-methods",children:"NVIDIA CUDA Installation Guide - Handle Conflicting Installation Methods"})]}),"\n",(0,s.jsx)(n.h3,{id:"uninstall-a-toolkit-runfile-installation",children:"Uninstall a Toolkit runfile installation"}),"\n",(0,s.jsx)(n.p,{children:"Use the following command to uninstall a Toolkit runfile installation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/cuda-X.Y/bin/cuda-uninstaller\n"})}),"\n",(0,s.jsx)(n.h3,{id:"steps-to-uninstall-cuda",children:"Steps to Uninstall CUDA"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Stop NVIDIA Persistenced Service (if running):","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo service nvidia-persistenced stop\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Remove CUDA Toolkit:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'sudo apt-get --purge remove "*cublas*" "cuda*" "nsight*"\n'})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Remove NVIDIA Drivers:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'sudo apt-get --purge remove "*nvidia*"\n'})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Remove Source File Installations (if applicable): Assuming the default installation location is /usr/local, remove it using:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo rm -rf /usr/local/cuda*\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"install-cuda",children:"Install CUDA"}),"\n",(0,s.jsxs)(n.p,{children:["Refer to the ",(0,s.jsx)(n.a,{href:"https://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html#runfile-installer",children:"CUDA Quick Start Guide"})," for more information."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Download the CUDA installer:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"wget https://developer.download.nvidia.com/compute/cuda/12.6.2/local_installers/cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Run the installer:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo sh cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"If you encounter an error, the installer will create a file at:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"/etc/modprobe.d/nvidia-installer-disable-nouveau.conf\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Reboot the system:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo reboot\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"After rebooting, rerun the installer:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo sh cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Verify CUDA installation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"ls /usr/local/ | grep cuda\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add environment variables:\nOpen the ",(0,s.jsx)(n.code,{children:".bashrc"})," file:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"nano ~/.bashrc\n"})}),"\n",(0,s.jsx)(n.p,{children:"Append the following lines to the end of the file:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'export PATH="/usr/local/cuda/bin:$PATH"\nexport LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"\n'})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Apply the changes:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"source ~/.bashrc\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h1,{id:"installing-the-nvidia-container-toolkit",children:"Installing the NVIDIA Container Toolkit"}),"\n",(0,s.jsxs)(n.p,{children:["Refer to the ",(0,s.jsx)(n.a,{href:"https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html",children:"NVIDIA Documentation"})]}),"\n",(0,s.jsx)(n.h3,{id:"installing-with-apt",children:"Installing with Apt"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Configure the production repository:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Optionally, configure the repository to use experimental packages:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Update the packages list from the repository:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get update\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Install the NVIDIA Container Toolkit packages:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get install -y nvidia-container-toolkit\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-docker",children:"Configuring Docker"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Configure the container runtime by using the ",(0,s.jsx)(n.code,{children:"nvidia-ctk"})," command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo nvidia-ctk runtime configure --runtime=docker\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"nvidia-ctk"})," command modifies the ",(0,s.jsx)(n.code,{children:"/etc/docker/daemon.json"})," file on the host. The file is updated so that Docker can use the NVIDIA Container Runtime."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Restart the Docker daemon:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo systemctl restart docker\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"pull-raiko",children:"Pull Raiko"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/raiko.git\ncd raiko\ngit checkout sp1-main\ncargo --version\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-raiko-with-sp1",children:"Install Raiko with SP1"}),"\n",(0,s.jsx)(n.p,{children:"Install Raiko with the SP1 target:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"TARGET=sp1 make install\n"})}),"\n",(0,s.jsx)(n.h2,{id:"build-sp1-program",children:"Build SP1 Program"}),"\n",(0,s.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cargo +nightly-2024-04-18 run --release --bin sp1-builder -F raiko-tasks/in-memory\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You will get the ",(0,s.jsx)(n.code,{children:"programVKey"})," from the output of that call."]}),"\n",(0,s.jsx)(n.h2,{id:"setup-program-vk-key-for-the-sp1-verifier-contract",children:"Setup Program VK Key for the SP1 Verifier Contract"}),"\n",(0,s.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'cast send "setProgramTrusted(bytes32,bool)" true --rpc-url --private-key \n'})}),"\n",(0,s.jsx)(n.h2,{id:"set-chain-spec",children:"Set Chain Spec"}),"\n",(0,s.jsx)(n.p,{children:"Edit the file located at:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"raiko/host/config/chain_spec_list_default.json\n"})}),"\n",(0,s.jsx)(n.p,{children:"Set the values according to your chain configuration."}),"\n",(0,s.jsx)(n.h2,{id:"build-raiko",children:"Build Raiko"}),"\n",(0,s.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cargo +nightly-2024-04-18 build --release --features sp1 -F raiko-tasks/in-memory\n"})}),"\n",(0,s.jsx)(n.h2,{id:"run-raiko",children:"Run Raiko"}),"\n",(0,s.jsx)(n.p,{children:"Set the required environment variables:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"export SP1_VERIFIER_RPC_URL=http://139.162.249.67:32002\nexport SP1_VERIFIER_ADDRESS=0x9c63682FC2d397Aa47471c046cE57b095d7195D7\n"})}),"\n",(0,s.jsx)(n.p,{children:"Run Raiko in the background:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"nohup ./target/release/raiko-host --chain-spec-path= > ~/log/output.log 2>&1 &\n"})}),"\n",(0,s.jsx)(n.h2,{id:"check-logs",children:"Check Logs"}),"\n",(0,s.jsx)(n.p,{children:"View the log output:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cat ~/log/output.log\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,n,l)=>{l.d(n,{R:()=>a,x:()=>t});var s=l(6540);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[154],{4456:(e,n,l)=>{l.r(n),l.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>o});var s=l(4848),i=l(8453);const r={sidebar_position:3},a="Deploy SP1 Prover",t={id:"Guides/provers/sp1-prover",title:"Deploy SP1 Prover",description:"Prerequisites",source:"@site/docs/Guides/provers/sp1-prover.mdx",sourceDirName:"Guides/provers",slug:"/Guides/provers/sp1-prover",permalink:"/docs/Guides/provers/sp1-prover",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/provers/sp1-prover.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Deploy RISC0 Prover",permalink:"/docs/Guides/provers/risc0-prover"},next:{title:"Deploy L2",permalink:"/docs/Guides/deploy-l2"}},c={},o=[{value:"Prerequisites",id:"prerequisites",level:3},{value:"Overview",id:"overview",level:2},{value:"Install Docker",id:"install-docker",level:2},{value:"Allow Running Docker Without sudo",id:"allow-running-docker-without-sudo",level:4},{value:"Install Rust",id:"install-rust",level:2},{value:"Install sccache",id:"install-sccache",level:2},{value:"Install gcc-12",id:"install-gcc-12",level:2},{value:"Install g++-12",id:"install-g-12",level:2},{value:"Install openssl",id:"install-openssl",level:2},{value:"Install package-config",id:"install-package-config",level:2},{value:"Uninstall Existing CUDA (optional)",id:"uninstall-existing-cuda-optional",level:2},{value:"Uninstall a Toolkit runfile installation",id:"uninstall-a-toolkit-runfile-installation",level:3},{value:"Steps to Uninstall CUDA",id:"steps-to-uninstall-cuda",level:3},{value:"Install CUDA",id:"install-cuda",level:2},{value:"Installing with Apt",id:"installing-with-apt",level:3},{value:"Configuring Docker",id:"configuring-docker",level:3},{value:"Pull Raiko",id:"pull-raiko",level:2},{value:"Install Raiko with SP1",id:"install-raiko-with-sp1",level:2},{value:"Build SP1 Program",id:"build-sp1-program",level:2},{value:"Setup Program VK Key for the SP1 Verifier Contract",id:"setup-program-vk-key-for-the-sp1-verifier-contract",level:2},{value:"Set Chain Spec",id:"set-chain-spec",level:2},{value:"Build Raiko",id:"build-raiko",level:2},{value:"Run Raiko",id:"run-raiko",level:2},{value:"Check Logs",id:"check-logs",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"deploy-sp1-prover",children:"Deploy SP1 Prover"})}),"\n",(0,s.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Machine with CUDA support"}),"\n",(0,s.jsx)(n.li,{children:"L1 Accounts with funds (One for the Prover, One for Prover Registry)"}),"\n",(0,s.jsx)(n.li,{children:"L1 RPC URL"}),"\n",(0,s.jsx)(n.li,{children:"L1 Account Private Key"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(n.p,{children:["Set up Docker, CUDA, CUDA Container Toolkit and other dependencies to run SP1 prover on an x86 machine.\nFor more information, refer to the ",(0,s.jsx)(n.a,{href:"https://docs.succinct.xyz/introduction.html",children:(0,s.jsx)(n.strong,{children:"Succinct Documentation"})}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"install-docker",children:"Install Docker"}),"\n",(0,s.jsxs)(n.p,{children:["Follow the ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/engine/install/ubuntu/",children:"official Docker documentation"})," for installation steps."]}),"\n",(0,s.jsxs)(n.h4,{id:"allow-running-docker-without-sudo",children:["Allow Running Docker Without ",(0,s.jsx)(n.code,{children:"sudo"})]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Add your user to the ",(0,s.jsx)(n.code,{children:"docker"})," group:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo usermod -aG docker $USER\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Apply the changes to the user group:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"newgrp docker\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Verify that Docker works without sudo:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker ps\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"install-rust",children:"Install Rust"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsudo reboot\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-sccache",children:"Install sccache"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cargo install sccache\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-gcc-12",children:"Install gcc-12"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt install gcc-12\ncd /usr/bin\nsudo rm gcc\nsudo ln -s gcc-12 gcc\ngcc --version\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-g-12",children:"Install g++-12"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt install g++-12\nsudo rm g++\nsudo ln -s g++-12 g++\ng++ --version\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-openssl",children:"Install openssl"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get install libssl-dev\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-package-config",children:"Install package-config"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt install pkg-config\n"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"uninstall-existing-cuda-optional",children:"Uninstall Existing CUDA (optional)"}),"\n",(0,s.jsxs)(n.p,{children:["Reference: ",(0,s.jsx)(n.a,{href:"https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#handle-conflicting-installation-methods",children:"NVIDIA CUDA Installation Guide - Handle Conflicting Installation Methods"})]}),"\n",(0,s.jsx)(n.h3,{id:"uninstall-a-toolkit-runfile-installation",children:"Uninstall a Toolkit runfile installation"}),"\n",(0,s.jsx)(n.p,{children:"Use the following command to uninstall a Toolkit runfile installation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/cuda-X.Y/bin/cuda-uninstaller\n"})}),"\n",(0,s.jsx)(n.h3,{id:"steps-to-uninstall-cuda",children:"Steps to Uninstall CUDA"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Stop NVIDIA Persistenced Service (if running):","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo service nvidia-persistenced stop\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Remove CUDA Toolkit:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'sudo apt-get --purge remove "*cublas*" "cuda*" "nsight*"\n'})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Remove NVIDIA Drivers:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'sudo apt-get --purge remove "*nvidia*"\n'})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Remove Source File Installations (if applicable): Assuming the default installation location is /usr/local, remove it using:","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo rm -rf /usr/local/cuda*\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"install-cuda",children:"Install CUDA"}),"\n",(0,s.jsxs)(n.p,{children:["Refer to the ",(0,s.jsx)(n.a,{href:"https://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html#runfile-installer",children:"CUDA Quick Start Guide"})," for more information."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Download the CUDA installer:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"wget https://developer.download.nvidia.com/compute/cuda/12.6.2/local_installers/cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Run the installer:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo sh cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"If you encounter an error, the installer will create a file at:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"/etc/modprobe.d/nvidia-installer-disable-nouveau.conf\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Reboot the system:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo reboot\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"After rebooting, rerun the installer:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo sh cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Verify CUDA installation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"ls /usr/local/ | grep cuda\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add environment variables:\nOpen the ",(0,s.jsx)(n.code,{children:".bashrc"})," file:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"nano ~/.bashrc\n"})}),"\n",(0,s.jsx)(n.p,{children:"Append the following lines to the end of the file:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'export PATH="/usr/local/cuda/bin:$PATH"\nexport LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"\n'})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Apply the changes:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"source ~/.bashrc\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h1,{id:"installing-the-nvidia-container-toolkit",children:"Installing the NVIDIA Container Toolkit"}),"\n",(0,s.jsxs)(n.p,{children:["Refer to the ",(0,s.jsx)(n.a,{href:"https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html",children:"NVIDIA Documentation"})]}),"\n",(0,s.jsx)(n.h3,{id:"installing-with-apt",children:"Installing with Apt"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Configure the production repository:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Optionally, configure the repository to use experimental packages:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Update the packages list from the repository:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get update\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Install the NVIDIA Container Toolkit packages:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get install -y nvidia-container-toolkit\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-docker",children:"Configuring Docker"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Configure the container runtime by using the ",(0,s.jsx)(n.code,{children:"nvidia-ctk"})," command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo nvidia-ctk runtime configure --runtime=docker\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"nvidia-ctk"})," command modifies the ",(0,s.jsx)(n.code,{children:"/etc/docker/daemon.json"})," file on the host. The file is updated so that Docker can use the NVIDIA Container Runtime."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Restart the Docker daemon:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo systemctl restart docker\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"pull-raiko",children:"Pull Raiko"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/raiko.git\ncd raiko\ngit checkout sp1-main\ncargo --version\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-raiko-with-sp1",children:"Install Raiko with SP1"}),"\n",(0,s.jsx)(n.p,{children:"Install Raiko with the SP1 target:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"TARGET=sp1 make install\n"})}),"\n",(0,s.jsx)(n.h2,{id:"build-sp1-program",children:"Build SP1 Program"}),"\n",(0,s.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cargo +nightly-2024-04-18 run --release --bin sp1-builder -F raiko-tasks/in-memory\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You will get the ",(0,s.jsx)(n.code,{children:"programVKey"})," from the output of that call."]}),"\n",(0,s.jsx)(n.h2,{id:"setup-program-vk-key-for-the-sp1-verifier-contract",children:"Setup Program VK Key for the SP1 Verifier Contract"}),"\n",(0,s.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'cast send "setProgramTrusted(bytes32,bool)" true --rpc-url --private-key \n'})}),"\n",(0,s.jsx)(n.h2,{id:"set-chain-spec",children:"Set Chain Spec"}),"\n",(0,s.jsx)(n.p,{children:"Edit the file located at:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"raiko/host/config/chain_spec_list_default.json\n"})}),"\n",(0,s.jsx)(n.p,{children:"Set the values according to your chain configuration."}),"\n",(0,s.jsx)(n.h2,{id:"build-raiko",children:"Build Raiko"}),"\n",(0,s.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cargo +nightly-2024-04-18 build --release --features sp1 -F raiko-tasks/in-memory\n"})}),"\n",(0,s.jsx)(n.h2,{id:"run-raiko",children:"Run Raiko"}),"\n",(0,s.jsx)(n.p,{children:"Set the required environment variables:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"export SP1_VERIFIER_RPC_URL=http://139.162.249.67:32002\nexport SP1_VERIFIER_ADDRESS=0x9c63682FC2d397Aa47471c046cE57b095d7195D7\n"})}),"\n",(0,s.jsx)(n.p,{children:"Run Raiko in the background:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"nohup ./target/release/raiko-host --chain-spec-path= > ~/log/output.log 2>&1 &\n"})}),"\n",(0,s.jsx)(n.h2,{id:"check-logs",children:"Check Logs"}),"\n",(0,s.jsx)(n.p,{children:"View the log output:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cat ~/log/output.log\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,n,l)=>{l.d(n,{R:()=>a,x:()=>t});var s=l(6540);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e384e19.085f5d0c.js b/assets/js/0e384e19.31c4fb85.js similarity index 74% rename from assets/js/0e384e19.085f5d0c.js rename to assets/js/0e384e19.31c4fb85.js index 7a114e6..1120031 100644 --- a/assets/js/0e384e19.085f5d0c.js +++ b/assets/js/0e384e19.31c4fb85.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[976],{619:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var t=i(4848),r=i(8453);const s={sidebar_position:1},o="Introduction to Surge",l={id:"intro",title:"Introduction to Surge",description:"Surge is a maximally aligned, high-performance Ethereum rollup built on modified Taiko technology. It inherits Ethereum's security while providing enhanced performance and composability.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/intro",permalink:"/docs/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/intro.md",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Getting Started",permalink:"/docs/getting-started"}},a={},d=[{value:"What is Surge?",id:"what-is-surge",level:2},{value:"Key Features",id:"key-features",level:2},{value:"Goals",id:"goals",level:2}];function c(e){const n={h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"introduction-to-surge",children:"Introduction to Surge"})}),"\n",(0,t.jsx)(n.p,{children:"Surge is a maximally aligned, high-performance Ethereum rollup built on modified Taiko technology. It inherits Ethereum's security while providing enhanced performance and composability."}),"\n",(0,t.jsx)(n.h2,{id:"what-is-surge",children:"What is Surge?"}),"\n",(0,t.jsx)(n.p,{children:"Surge is designed to be:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"A based rollup with maximum Ethereum alignment"}),"\n",(0,t.jsx)(n.li,{children:"Censorship resistant"}),"\n",(0,t.jsx)(n.li,{children:"Optimized for user experience with low transaction costs and confirmation times"}),"\n",(0,t.jsx)(n.li,{children:"Focused on cross-layer composability"}),"\n",(0,t.jsx)(n.li,{children:"Built on proven Taiko technology, modified to remove token dependencies"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"key-features",children:"Key Features"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Native messaging bridge with Ethereum L1"}),"\n",(0,t.jsx)(n.li,{children:"ZK proving system with multiple prover options"}),"\n",(0,t.jsx)(n.li,{children:"High gas throughput (GGas per second)"}),"\n",(0,t.jsx)(n.li,{children:"Cross-layer composability support (Coming soon)"}),"\n",(0,t.jsx)(n.li,{children:"Open source"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"goals",children:"Goals"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Provide maximum Ethereum alignment"}),"\n",(0,t.jsx)(n.li,{children:"Push Rollup Centric Roadmap forward with Engineering and Research"}),"\n",(0,t.jsx)(n.li,{children:"Maintain censorship resistance"}),"\n",(0,t.jsx)(n.li,{children:"Enable seamless composability with L1 and other rollups"}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>l});var t=i(6540);const r={},s=t.createContext(r);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[976],{619:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var t=i(4848),r=i(8453);const s={sidebar_position:1},o="Introduction to Surge",l={id:"intro",title:"Introduction to Surge",description:"Surge is a maximally aligned, high-performance Ethereum rollup built on modified Taiko technology. It inherits Ethereum's security while providing enhanced performance and composability.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/intro",permalink:"/docs/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/intro.md",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Getting Started",permalink:"/docs/getting-started"}},a={},d=[{value:"What is Surge?",id:"what-is-surge",level:2},{value:"Key Features",id:"key-features",level:2},{value:"Goals",id:"goals",level:2}];function c(e){const n={h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"introduction-to-surge",children:"Introduction to Surge"})}),"\n",(0,t.jsx)(n.p,{children:"Surge is a maximally aligned, high-performance Ethereum rollup built on modified Taiko technology. It inherits Ethereum's security while providing enhanced performance and composability."}),"\n",(0,t.jsx)(n.h2,{id:"what-is-surge",children:"What is Surge?"}),"\n",(0,t.jsx)(n.p,{children:"Surge is designed to be:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"A based rollup with maximum Ethereum alignment"}),"\n",(0,t.jsx)(n.li,{children:"Censorship resistant"}),"\n",(0,t.jsx)(n.li,{children:"Optimized for user experience with low transaction costs and confirmation times"}),"\n",(0,t.jsx)(n.li,{children:"Focused on cross-layer composability"}),"\n",(0,t.jsx)(n.li,{children:"Built on proven Taiko technology, modified to remove token dependencies"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"key-features",children:"Key Features"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Native messaging bridge with Ethereum L1"}),"\n",(0,t.jsx)(n.li,{children:"ZK proving system with multiple prover options"}),"\n",(0,t.jsx)(n.li,{children:"High gas throughput (GGas per second)"}),"\n",(0,t.jsx)(n.li,{children:"Cross-layer composability support (Coming soon)"}),"\n",(0,t.jsx)(n.li,{children:"Open source"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"goals",children:"Goals"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Provide maximum Ethereum alignment"}),"\n",(0,t.jsx)(n.li,{children:"Push the Rollup Centric Roadmap forward with engineering and research"}),"\n",(0,t.jsx)(n.li,{children:"Maintain censorship resistance"}),"\n",(0,t.jsx)(n.li,{children:"Enable seamless composability with L1 and other rollups"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>l});var t=i(6540);const r={},s=t.createContext(r);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/25fd459b.ea8fda03.js b/assets/js/25fd459b.ba2c5a22.js similarity index 96% rename from assets/js/25fd459b.ea8fda03.js rename to assets/js/25fd459b.ba2c5a22.js index c2598ee..1895ec9 100644 --- a/assets/js/25fd459b.ea8fda03.js +++ b/assets/js/25fd459b.ba2c5a22.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[14],{3136:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>u});var t=n(4848),s=n(8453);const r={},i="Troubleshooting",d={id:"Troubleshooting/index",title:"Troubleshooting",description:"Find solutions and guidance for common issues when working with Surge.",source:"@site/docs/Troubleshooting/index.mdx",sourceDirName:"Troubleshooting",slug:"/Troubleshooting/",permalink:"/docs/Troubleshooting/",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Troubleshooting/index.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Deploy Bridge UI",permalink:"/docs/Guides/deploy-bridge-ui"},next:{title:"Error Codes",permalink:"/docs/Troubleshooting/error-codes"}},c={},u=[{value:"Topics",id:"topics",level:2}];function l(e){const o={h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"troubleshooting",children:"Troubleshooting"})}),"\n",(0,t.jsx)(o.p,{children:"Find solutions and guidance for common issues when working with Surge."}),"\n",(0,t.jsx)(o.h2,{id:"topics",children:"Topics"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Error Codes"}),"\n",(0,t.jsx)(o.li,{children:"Common Issues"}),"\n",(0,t.jsx)(o.li,{children:"Debugging Tips"}),"\n"]})]})}function h(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,o,n)=>{n.d(o,{R:()=>i,x:()=>d});var t=n(6540);const s={},r=t.createContext(s);function i(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[14],{3136:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>u});var t=n(4848),s=n(8453);const r={},i="Troubleshooting",d={id:"Troubleshooting/index",title:"Troubleshooting",description:"Find solutions and guidance for common issues when working with Surge.",source:"@site/docs/Troubleshooting/index.mdx",sourceDirName:"Troubleshooting",slug:"/Troubleshooting/",permalink:"/docs/Troubleshooting/",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Troubleshooting/index.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Deploy Bridge UI",permalink:"/docs/Guides/deploy-bridge-ui"},next:{title:"Error Codes",permalink:"/docs/Troubleshooting/error-codes"}},c={},u=[{value:"Topics",id:"topics",level:2}];function l(e){const o={h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"troubleshooting",children:"Troubleshooting"})}),"\n",(0,t.jsx)(o.p,{children:"Find solutions and guidance for common issues when working with Surge."}),"\n",(0,t.jsx)(o.h2,{id:"topics",children:"Topics"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Error Codes"}),"\n",(0,t.jsx)(o.li,{children:"Common Issues"}),"\n",(0,t.jsx)(o.li,{children:"Debugging Tips"}),"\n"]})]})}function h(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,o,n)=>{n.d(o,{R:()=>i,x:()=>d});var t=n(6540);const s={},r=t.createContext(s);function i(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2dd7e07d.1a0604ae.js b/assets/js/2dd7e07d.0a6cac2e.js similarity index 99% rename from assets/js/2dd7e07d.1a0604ae.js rename to assets/js/2dd7e07d.0a6cac2e.js index a9d934d..182a45f 100644 --- a/assets/js/2dd7e07d.1a0604ae.js +++ b/assets/js/2dd7e07d.0a6cac2e.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[688],{8162:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var t=r(4848),i=r(8453);r(1470),r(9365);const s={sidebar_position:2},l="Deploy Protocols on L1",a={id:"Guides/deploy-l1-protocols",title:"Deploy Protocols on L1",description:"If you're using the Kurtosis Package to deploy L1, you can skip this section.",source:"@site/docs/Guides/deploy-l1-protocols.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-l1-protocols",permalink:"/docs/Guides/deploy-l1-protocols",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-l1-protocols.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Deploy L1",permalink:"/docs/Guides/deploy-l1"},next:{title:"Set up a Prover",permalink:"/docs/Guides/provers/"}},o={},c=[{value:"1. Deploy Taiko on L1",id:"1-deploy-taiko-on-l1",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Set Environment Variables",id:"set-environment-variables",level:3},{value:"Deployment Script",id:"deployment-script",level:3},{value:"2. Configure Bridge on L1",id:"2-configure-bridge-on-l1",level:2},{value:"Prerequisites",id:"prerequisites-1",level:3},{value:"Set Environment Variables",id:"set-environment-variables-1",level:3},{value:"Bridge Setup Script",id:"bridge-setup-script",level:3},{value:"3. Configure Signal Service on L1",id:"3-configure-signal-service-on-l1",level:2},{value:"Prerequisites",id:"prerequisites-2",level:3},{value:"Set Environment Variables",id:"set-environment-variables-2",level:3},{value:"Signal Service Setup Script",id:"signal-service-setup-script",level:3},{value:"4. Configure SGX TCB on L1",id:"4-configure-sgx-tcb-on-l1",level:2},{value:"Prerequisites",id:"prerequisites-3",level:3},{value:"Set Environment Variables",id:"set-environment-variables-3",level:3},{value:"SGX TCB Setup Script",id:"sgx-tcb-setup-script",level:3}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deploy-protocols-on-l1",children:"Deploy Protocols on L1"})}),"\n",(0,t.jsx)(n.admonition,{title:"Skip if Using Kurtosis",type:"note",children:(0,t.jsx)(n.p,{children:"If you're using the Kurtosis Package to deploy L1, you can skip this section."})}),"\n",(0,t.jsx)(n.h2,{id:"1-deploy-taiko-on-l1",children:"1. Deploy Taiko on L1"}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L2 Chain ID (e.g. 763374)"}),"\n",(0,t.jsxs)(n.li,{children:["L2 Genesis Hash (e.g. ",(0,t.jsx)(n.code,{children:"0xbeced3738f1246571cccabc82a1e6cbd9ed9d5f7ed2b6c7ded28f9722317bd9e"}),")"]}),"\n",(0,t.jsx)(n.li,{children:"L1 Account with funds"}),"\n",(0,t.jsx)(n.li,{children:"L1 RPC URL"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"set-environment-variables",children:"Set Environment Variables"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export FOUNDRY_PROFILE=layer1\nexport CHAIN_ID=763374\nexport GENESIS_HASH=0xbeced3738f1246571cccabc82a1e6cbd9ed9d5f7ed2b6c7ded28f9722317bd9e\nexport L1_ACCOUNT_ADDRESS=0x8943545177806ED17B9F23F0a21ee5948eCaa776\nexport L1_ACCOUNT_PRIVATE_KEY=0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\nexport L1_RPC_URL=https://placeholder:32002\n"})}),"\n",(0,t.jsx)(n.h3,{id:"deployment-script",children:"Deployment Script"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n -e PROPOSER=0x0000000000000000000000000000000000000000 \\\n -e PROPOSER_ONE=0x0000000000000000000000000000000000000000 \\\n -e GUARDIAN_PROVERS=0x1000777700000000000000000000000000000001,0x1000777700000000000000000000000000000002,0x1000777700000000000000000000000000000003,0x1000777700000000000000000000000000000004,0x1000777700000000000000000000000000000005,0x1000777700000000000000000000000000000006,0x1000777700000000000000000000000000000007 \\\n -e TAIKO_L2_ADDRESS=0x${CHAIN_ID}0000000000000000000000000000000001 \\\n -e L2_SIGNAL_SERVICE=0x${CHAIN_ID}0000000000000000000000000000000005 \\\n -e CONTRACT_OWNER=${L1_ACCOUNT_ADDRESS} \\\n -e SHARED_ADDRESS_MANAGER=0x0000000000000000000000000000000000000000 \\\n -e PAUSE_TAIKO_L1=false \\\n -e PAUSE_BRIDGE=false \\\n -e NUM_MIN_MAJORITY_GUARDIANS=7 \\\n -e NUM_MIN_MINORITY_GUARDIANS=2 \\\n -e TIER_PROVIDER=composite \\\n -e PRIVATE_KEY=${L1_ACCOUNT_PRIVATE_KEY} \\\n -e L2_GENESIS_HASH=${GENESIS_HASH} \\\n -e FOUNDRY_PROFILE=${FOUNDRY_PROFILE} \\\n nethsurge/taiko-contract:surge-devnet \\\n forge script ./script/layer1/DeployProtocolOnL1.s.sol:DeployProtocolOnL1 \\\n --private-key ${L1_ACCOUNT_PRIVATE_KEY} \\\n --fork-url ${L1_RPC_URL} \\\n --broadcast --ffi -vv --block-gas-limit 200000000\n"})}),"\n",(0,t.jsx)(n.h2,{id:"2-configure-bridge-on-l1",children:"2. Configure Bridge on L1"}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites-1",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L2 Chain ID (763374)"}),"\n",(0,t.jsxs)(n.li,{children:["L2_BRIDGE (",(0,t.jsx)(n.code,{children:"0x7633740000000000000000000000000000000001"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["L1_SHARED_ADDRESS_MANAGER (",(0,t.jsx)(n.code,{children:"0x0643D39D47CF0ea95Dbea69Bf11a7F8C4Bc34968"}),")"]}),"\n",(0,t.jsx)(n.li,{children:"L1 Account with funds"}),"\n",(0,t.jsx)(n.li,{children:"L1 RPC URL"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"set-environment-variables-1",children:"Set Environment Variables"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export FOUNDRY_PROFILE=layer1\nexport DOMAIN=763374\nexport ADDRESS=0x7633740000000000000000000000000000000001\nexport NAME=0x6272696467650000000000000000000000000000000000000000000000000000\nexport PROXY_ADDRESS=0x0643D39D47CF0ea95Dbea69Bf11a7F8C4Bc34968\nexport PRIVATE_KEY=0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\nexport L1_RPC_URL=https://placeholder:32002\n"})}),"\n",(0,t.jsx)(n.h3,{id:"bridge-setup-script",children:"Bridge Setup Script"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n -e FOUNDRY_PROFILE=${FOUNDRY_PROFILE} \\\n -e DOMAIN=${DOMAIN} \\\n -e ADDRESS=${ADDRESS} \\\n -e NAME=${NAME} \\\n -e PROXY_ADDRESS=${PROXY_ADDRESS} \\\n -e PRIVATE_KEY=${PRIVATE_KEY} \\\n nethsurge/taiko-contract:surge-devnet \\\n forge script ./script/shared/SetAddress.s.sol \\\n --private-key ${PRIVATE_KEY} \\\n --fork-url ${L1_RPC_URL} \\\n --broadcast -vvv\n"})}),"\n",(0,t.jsx)(n.h2,{id:"3-configure-signal-service-on-l1",children:"3. Configure Signal Service on L1"}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites-2",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L2 Chain ID (763374)"}),"\n",(0,t.jsxs)(n.li,{children:["L2_SIGNAL_SERVICE (",(0,t.jsx)(n.code,{children:"0x7633740000000000000000000000000000000005"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["L1_SHARED_ADDRESS_MANAGER (",(0,t.jsx)(n.code,{children:"0x0643D39D47CF0ea95Dbea69Bf11a7F8C4Bc34968"}),")"]}),"\n",(0,t.jsx)(n.li,{children:"L1 Account with funds"}),"\n",(0,t.jsx)(n.li,{children:"L1 RPC URL"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"set-environment-variables-2",children:"Set Environment Variables"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export FOUNDRY_PROFILE=layer1\nexport DOMAIN=763374\nexport ADDRESS=0x7633740000000000000000000000000000000005\nexport NAME=0x7369676e616c5f73657276696365000000000000000000000000000000000000\nexport PROXY_ADDRESS=0x0643D39D47CF0ea95Dbea69Bf11a7F8C4Bc34968\nexport PRIVATE_KEY=0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\nexport L1_RPC_URL=https://placeholder:32002\n"})}),"\n",(0,t.jsx)(n.h3,{id:"signal-service-setup-script",children:"Signal Service Setup Script"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n -e FOUNDRY_PROFILE=${FOUNDRY_PROFILE} \\\n -e DOMAIN=${DOMAIN} \\\n -e ADDRESS=${ADDRESS} \\\n -e NAME=${NAME} \\\n -e PROXY_ADDRESS=${PROXY_ADDRESS} \\\n -e PRIVATE_KEY=${PRIVATE_KEY} \\\n nethsurge/taiko-contract:surge-devnet \\\n forge script ./script/shared/SetAddress.s.sol \\\n --private-key ${PRIVATE_KEY} \\\n --fork-url ${L1_RPC_URL} \\\n --broadcast -vvv\n"})}),"\n",(0,t.jsx)(n.h2,{id:"4-configure-sgx-tcb-on-l1",children:"4. Configure SGX TCB on L1"}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites-3",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["MRENCLAVE: ",(0,t.jsx)(n.code,{children:"14c4362d5dd0af9721ef9bdea2c92bf84b67fe34a102c892182ce2be7a81f2c5"})]}),"\n",(0,t.jsxs)(n.li,{children:["MRSIGNER: ",(0,t.jsx)(n.code,{children:"ca0583a715534a8c981b914589a7f0dc5d60959d9ae79fb5353299a4231673d5"})]}),"\n",(0,t.jsxs)(n.li,{children:["SGX_VERIFIER_ADDRESS: ",(0,t.jsx)(n.code,{children:"0x86A0679C7987B5BA9600affA994B78D0660088ff"})]}),"\n",(0,t.jsxs)(n.li,{children:["ATTESTATION_ADDRESS: ",(0,t.jsx)(n.code,{children:"0xdFb2fAc1519eDA2b3ee1Edf578ee0509DC8633f7"})]}),"\n",(0,t.jsxs)(n.li,{children:["PEM_CERTCHAIN_ADDRESS: ",(0,t.jsx)(n.code,{children:"0x86B28E406738f2928bE33D111A0B821BBC5610A2"})]}),"\n",(0,t.jsx)(n.li,{children:"Quote value (see documentation)"}),"\n",(0,t.jsx)(n.li,{children:"L1 Account with funds"}),"\n",(0,t.jsx)(n.li,{children:"L1 RPC URL"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Full Quote Value",type:"info",children:(0,t.jsx)(n.p,{children:"For the complete Quote value required for SGX TCB configuration, please refer to the deployment documentation or contact your system administrator."})}),"\n",(0,t.jsx)(n.h3,{id:"set-environment-variables-3",children:"Set Environment Variables"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'export FOUNDRY_PROFILE=layer1\nexport MR_ENCLAVE=14c4362d5dd0af9721ef9bdea2c92bf84b67fe34a102c892182ce2be7a81f2c5\nexport MR_SIGNER=ca0583a715534a8c981b914589a7f0dc5d60959d9ae79fb5353299a4231673d5\nexport QEID_PATH="/test/qe_identity"\nexport TCB_INFO_PATH="/test/tcb"\nexport V3_QUOTE_BYTES=${Quote}\nexport SGX_VERIFIER_ADDRESS=0x86A0679C7987B5BA9600affA994B78D0660088ff\nexport ATTESTATION_ADDRESS=0xdFb2fAc1519eDA2b3ee1Edf578ee0509DC8633f7\nexport PEM_CERTCHAIN_ADDRESS=0x86B28E406738f2928bE33D111A0B821BBC5610A2\nexport FMSPC=00906ED50000\n'})}),"\n",(0,t.jsx)(n.h3,{id:"sgx-tcb-setup-script",children:"SGX TCB Setup Script"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'docker run \\\n -e TASK_ENABLE="[1,1,1,1,1,1]" \\\n -e MR_ENCLAVE=${MR_ENCLAVE} \\\n -e MR_SIGNER=${MR_SIGNER} \\\n -e QEID_PATH=${QEID_PATH} \\\n -e TCB_INFO_PATH=${TCB_INFO_PATH} \\\n -e V3_QUOTE_BYTES=${V3_QUOTE_BYTES} \\\n -e SGX_VERIFIER_ADDRESS=${SGX_VERIFIER_ADDRESS} \\\n -e ATTESTATION_ADDRESS=${ATTESTATION_ADDRESS} \\\n -e PEM_CERTCHAIN_ADDRESS=${PEM_CERTCHAIN_ADDRESS} \\\n -e FMSPC=${FMSPC} \\\n -e TCB_FILE=${TCB_FILE} \\\n -e QE_IDENTITY_FILE=${QE_IDENTITY_FILE} \\\n -e PRIVATE_KEY=${PRIVATE_KEY} \\\n nethsurge/taiko-contract:surge-devnet \\\n sh -c \'curl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/tcb?fmspc=${FMSPC}" > ${TCB_FILE} && \\\n curl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/qe/identity" > ${QE_IDENTITY_FILE} && \\\n jq ".tcbInfo.fmspc |= ascii_downcase" ${TCB_FILE} > temp.json && \\\n mv temp.json ${TCB_FILE} && \\\n forge script ./script/layer1/SetDcapParams.s.sol:SetDcapParams \\\n --private-key ${PRIVATE_KEY} \\\n --fork-url ${L1_RPC_URL} \\\n --broadcast --evm-version cancun --ffi -vvvv --block-gas-limit 100000000 --legacy\'\n'})})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},9365:(e,n,r)=>{r.d(n,{A:()=>l});r(6540);var t=r(4164);const i={tabItem:"tabItem_Ymn6"};var s=r(4848);function l(e){let{children:n,hidden:r,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,t.A)(i.tabItem,l),hidden:r,children:n})}},1470:(e,n,r)=>{r.d(n,{A:()=>v});var t=r(6540),i=r(4164),s=r(3104),l=r(6347),a=r(205),o=r(7485),c=r(1682),d=r(679);function u(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:i}}=e;return{value:n,label:r,attributes:t,default:i}}))}(r);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function h(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function E(e){let{queryString:n=!1,groupId:r}=e;const i=(0,l.W6)(),s=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,o.aZ)(s),(0,t.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(i.location.search);n.set(s,e),i.replace({...i.location,search:n.toString()})}),[s,i])]}function x(e){const{defaultValue:n,queryString:r=!1,groupId:i}=e,s=p(e),[l,o]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!h({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:s}))),[c,u]=E({queryString:r,groupId:i}),[x,f]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,s]=(0,d.Dv)(r);return[i,(0,t.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:i}),_=(()=>{const e=c??x;return h({value:e,tabValues:s})?e:null})();(0,a.A)((()=>{_&&o(_)}),[_]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),f(e)}),[u,f,s]),tabValues:s}}var f=r(2303);const _={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=r(4848);function S(e){let{className:n,block:r,selectedValue:t,selectValue:l,tabValues:a}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),d=e=>{const n=e.currentTarget,r=o.indexOf(n),i=a[r].value;i!==t&&(c(n),l(i))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=o.indexOf(e.currentTarget)+1;n=o[r]??o[0];break}case"ArrowLeft":{const r=o.indexOf(e.currentTarget)-1;n=o[r]??o[o.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.A)("tabs",{"tabs--block":r},n),children:a.map((e=>{let{value:n,label:r,attributes:s}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>o.push(e),onKeyDown:u,onClick:d,...s,className:(0,i.A)("tabs__item",_.tabItem,s?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function A(e){let{lazy:n,children:r,selectedValue:s}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=l.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:(0,i.A)("margin-top--md",e.props.className)}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function R(e){const n=x(e);return(0,b.jsxs)("div",{className:(0,i.A)("tabs-container",_.tabList),children:[(0,b.jsx)(S,{...n,...e}),(0,b.jsx)(A,{...n,...e})]})}function v(e){const n=(0,f.A)();return(0,b.jsx)(R,{...e,children:u(e.children)},String(n))}},8453:(e,n,r)=>{r.d(n,{R:()=>l,x:()=>a});var t=r(6540);const i={},s=t.createContext(i);function l(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[688],{8162:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var t=r(4848),i=r(8453);r(1470),r(9365);const s={sidebar_position:2},l="Deploy Protocols on L1",a={id:"Guides/deploy-l1-protocols",title:"Deploy Protocols on L1",description:"If you're using the Kurtosis Package to deploy L1, you can skip this section.",source:"@site/docs/Guides/deploy-l1-protocols.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-l1-protocols",permalink:"/docs/Guides/deploy-l1-protocols",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-l1-protocols.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Deploy L1",permalink:"/docs/Guides/deploy-l1"},next:{title:"Set up a Prover",permalink:"/docs/Guides/provers/"}},o={},c=[{value:"1. Deploy Taiko on L1",id:"1-deploy-taiko-on-l1",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Set Environment Variables",id:"set-environment-variables",level:3},{value:"Deployment Script",id:"deployment-script",level:3},{value:"2. Configure Bridge on L1",id:"2-configure-bridge-on-l1",level:2},{value:"Prerequisites",id:"prerequisites-1",level:3},{value:"Set Environment Variables",id:"set-environment-variables-1",level:3},{value:"Bridge Setup Script",id:"bridge-setup-script",level:3},{value:"3. Configure Signal Service on L1",id:"3-configure-signal-service-on-l1",level:2},{value:"Prerequisites",id:"prerequisites-2",level:3},{value:"Set Environment Variables",id:"set-environment-variables-2",level:3},{value:"Signal Service Setup Script",id:"signal-service-setup-script",level:3},{value:"4. Configure SGX TCB on L1",id:"4-configure-sgx-tcb-on-l1",level:2},{value:"Prerequisites",id:"prerequisites-3",level:3},{value:"Set Environment Variables",id:"set-environment-variables-3",level:3},{value:"SGX TCB Setup Script",id:"sgx-tcb-setup-script",level:3}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deploy-protocols-on-l1",children:"Deploy Protocols on L1"})}),"\n",(0,t.jsx)(n.admonition,{title:"Skip if Using Kurtosis",type:"note",children:(0,t.jsx)(n.p,{children:"If you're using the Kurtosis Package to deploy L1, you can skip this section."})}),"\n",(0,t.jsx)(n.h2,{id:"1-deploy-taiko-on-l1",children:"1. Deploy Taiko on L1"}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L2 Chain ID (e.g. 763374)"}),"\n",(0,t.jsxs)(n.li,{children:["L2 Genesis Hash (e.g. ",(0,t.jsx)(n.code,{children:"0xbeced3738f1246571cccabc82a1e6cbd9ed9d5f7ed2b6c7ded28f9722317bd9e"}),")"]}),"\n",(0,t.jsx)(n.li,{children:"L1 Account with funds"}),"\n",(0,t.jsx)(n.li,{children:"L1 RPC URL"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"set-environment-variables",children:"Set Environment Variables"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export FOUNDRY_PROFILE=layer1\nexport CHAIN_ID=763374\nexport GENESIS_HASH=0xbeced3738f1246571cccabc82a1e6cbd9ed9d5f7ed2b6c7ded28f9722317bd9e\nexport L1_ACCOUNT_ADDRESS=0x8943545177806ED17B9F23F0a21ee5948eCaa776\nexport L1_ACCOUNT_PRIVATE_KEY=0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\nexport L1_RPC_URL=https://placeholder:32002\n"})}),"\n",(0,t.jsx)(n.h3,{id:"deployment-script",children:"Deployment Script"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n -e PROPOSER=0x0000000000000000000000000000000000000000 \\\n -e PROPOSER_ONE=0x0000000000000000000000000000000000000000 \\\n -e GUARDIAN_PROVERS=0x1000777700000000000000000000000000000001,0x1000777700000000000000000000000000000002,0x1000777700000000000000000000000000000003,0x1000777700000000000000000000000000000004,0x1000777700000000000000000000000000000005,0x1000777700000000000000000000000000000006,0x1000777700000000000000000000000000000007 \\\n -e TAIKO_L2_ADDRESS=0x${CHAIN_ID}0000000000000000000000000000000001 \\\n -e L2_SIGNAL_SERVICE=0x${CHAIN_ID}0000000000000000000000000000000005 \\\n -e CONTRACT_OWNER=${L1_ACCOUNT_ADDRESS} \\\n -e SHARED_ADDRESS_MANAGER=0x0000000000000000000000000000000000000000 \\\n -e PAUSE_TAIKO_L1=false \\\n -e PAUSE_BRIDGE=false \\\n -e NUM_MIN_MAJORITY_GUARDIANS=7 \\\n -e NUM_MIN_MINORITY_GUARDIANS=2 \\\n -e TIER_PROVIDER=composite \\\n -e PRIVATE_KEY=${L1_ACCOUNT_PRIVATE_KEY} \\\n -e L2_GENESIS_HASH=${GENESIS_HASH} \\\n -e FOUNDRY_PROFILE=${FOUNDRY_PROFILE} \\\n nethsurge/taiko-contract:surge-devnet \\\n forge script ./script/layer1/DeployProtocolOnL1.s.sol:DeployProtocolOnL1 \\\n --private-key ${L1_ACCOUNT_PRIVATE_KEY} \\\n --fork-url ${L1_RPC_URL} \\\n --broadcast --ffi -vv --block-gas-limit 200000000\n"})}),"\n",(0,t.jsx)(n.h2,{id:"2-configure-bridge-on-l1",children:"2. Configure Bridge on L1"}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites-1",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L2 Chain ID (763374)"}),"\n",(0,t.jsxs)(n.li,{children:["L2_BRIDGE (",(0,t.jsx)(n.code,{children:"0x7633740000000000000000000000000000000001"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["L1_SHARED_ADDRESS_MANAGER (",(0,t.jsx)(n.code,{children:"0x0643D39D47CF0ea95Dbea69Bf11a7F8C4Bc34968"}),")"]}),"\n",(0,t.jsx)(n.li,{children:"L1 Account with funds"}),"\n",(0,t.jsx)(n.li,{children:"L1 RPC URL"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"set-environment-variables-1",children:"Set Environment Variables"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export FOUNDRY_PROFILE=layer1\nexport DOMAIN=763374\nexport ADDRESS=0x7633740000000000000000000000000000000001\nexport NAME=0x6272696467650000000000000000000000000000000000000000000000000000\nexport PROXY_ADDRESS=0x0643D39D47CF0ea95Dbea69Bf11a7F8C4Bc34968\nexport PRIVATE_KEY=0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\nexport L1_RPC_URL=https://placeholder:32002\n"})}),"\n",(0,t.jsx)(n.h3,{id:"bridge-setup-script",children:"Bridge Setup Script"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n -e FOUNDRY_PROFILE=${FOUNDRY_PROFILE} \\\n -e DOMAIN=${DOMAIN} \\\n -e ADDRESS=${ADDRESS} \\\n -e NAME=${NAME} \\\n -e PROXY_ADDRESS=${PROXY_ADDRESS} \\\n -e PRIVATE_KEY=${PRIVATE_KEY} \\\n nethsurge/taiko-contract:surge-devnet \\\n forge script ./script/shared/SetAddress.s.sol \\\n --private-key ${PRIVATE_KEY} \\\n --fork-url ${L1_RPC_URL} \\\n --broadcast -vvv\n"})}),"\n",(0,t.jsx)(n.h2,{id:"3-configure-signal-service-on-l1",children:"3. Configure Signal Service on L1"}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites-2",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L2 Chain ID (763374)"}),"\n",(0,t.jsxs)(n.li,{children:["L2_SIGNAL_SERVICE (",(0,t.jsx)(n.code,{children:"0x7633740000000000000000000000000000000005"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["L1_SHARED_ADDRESS_MANAGER (",(0,t.jsx)(n.code,{children:"0x0643D39D47CF0ea95Dbea69Bf11a7F8C4Bc34968"}),")"]}),"\n",(0,t.jsx)(n.li,{children:"L1 Account with funds"}),"\n",(0,t.jsx)(n.li,{children:"L1 RPC URL"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"set-environment-variables-2",children:"Set Environment Variables"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export FOUNDRY_PROFILE=layer1\nexport DOMAIN=763374\nexport ADDRESS=0x7633740000000000000000000000000000000005\nexport NAME=0x7369676e616c5f73657276696365000000000000000000000000000000000000\nexport PROXY_ADDRESS=0x0643D39D47CF0ea95Dbea69Bf11a7F8C4Bc34968\nexport PRIVATE_KEY=0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\nexport L1_RPC_URL=https://placeholder:32002\n"})}),"\n",(0,t.jsx)(n.h3,{id:"signal-service-setup-script",children:"Signal Service Setup Script"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n -e FOUNDRY_PROFILE=${FOUNDRY_PROFILE} \\\n -e DOMAIN=${DOMAIN} \\\n -e ADDRESS=${ADDRESS} \\\n -e NAME=${NAME} \\\n -e PROXY_ADDRESS=${PROXY_ADDRESS} \\\n -e PRIVATE_KEY=${PRIVATE_KEY} \\\n nethsurge/taiko-contract:surge-devnet \\\n forge script ./script/shared/SetAddress.s.sol \\\n --private-key ${PRIVATE_KEY} \\\n --fork-url ${L1_RPC_URL} \\\n --broadcast -vvv\n"})}),"\n",(0,t.jsx)(n.h2,{id:"4-configure-sgx-tcb-on-l1",children:"4. Configure SGX TCB on L1"}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites-3",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["MRENCLAVE: ",(0,t.jsx)(n.code,{children:"14c4362d5dd0af9721ef9bdea2c92bf84b67fe34a102c892182ce2be7a81f2c5"})]}),"\n",(0,t.jsxs)(n.li,{children:["MRSIGNER: ",(0,t.jsx)(n.code,{children:"ca0583a715534a8c981b914589a7f0dc5d60959d9ae79fb5353299a4231673d5"})]}),"\n",(0,t.jsxs)(n.li,{children:["SGX_VERIFIER_ADDRESS: ",(0,t.jsx)(n.code,{children:"0x86A0679C7987B5BA9600affA994B78D0660088ff"})]}),"\n",(0,t.jsxs)(n.li,{children:["ATTESTATION_ADDRESS: ",(0,t.jsx)(n.code,{children:"0xdFb2fAc1519eDA2b3ee1Edf578ee0509DC8633f7"})]}),"\n",(0,t.jsxs)(n.li,{children:["PEM_CERTCHAIN_ADDRESS: ",(0,t.jsx)(n.code,{children:"0x86B28E406738f2928bE33D111A0B821BBC5610A2"})]}),"\n",(0,t.jsx)(n.li,{children:"Quote value (see documentation)"}),"\n",(0,t.jsx)(n.li,{children:"L1 Account with funds"}),"\n",(0,t.jsx)(n.li,{children:"L1 RPC URL"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Full Quote Value",type:"info",children:(0,t.jsx)(n.p,{children:"For the complete Quote value required for SGX TCB configuration, please refer to the deployment documentation or contact your system administrator."})}),"\n",(0,t.jsx)(n.h3,{id:"set-environment-variables-3",children:"Set Environment Variables"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'export FOUNDRY_PROFILE=layer1\nexport MR_ENCLAVE=14c4362d5dd0af9721ef9bdea2c92bf84b67fe34a102c892182ce2be7a81f2c5\nexport MR_SIGNER=ca0583a715534a8c981b914589a7f0dc5d60959d9ae79fb5353299a4231673d5\nexport QEID_PATH="/test/qe_identity"\nexport TCB_INFO_PATH="/test/tcb"\nexport V3_QUOTE_BYTES=${Quote}\nexport SGX_VERIFIER_ADDRESS=0x86A0679C7987B5BA9600affA994B78D0660088ff\nexport ATTESTATION_ADDRESS=0xdFb2fAc1519eDA2b3ee1Edf578ee0509DC8633f7\nexport PEM_CERTCHAIN_ADDRESS=0x86B28E406738f2928bE33D111A0B821BBC5610A2\nexport FMSPC=00906ED50000\n'})}),"\n",(0,t.jsx)(n.h3,{id:"sgx-tcb-setup-script",children:"SGX TCB Setup Script"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'docker run \\\n -e TASK_ENABLE="[1,1,1,1,1,1]" \\\n -e MR_ENCLAVE=${MR_ENCLAVE} \\\n -e MR_SIGNER=${MR_SIGNER} \\\n -e QEID_PATH=${QEID_PATH} \\\n -e TCB_INFO_PATH=${TCB_INFO_PATH} \\\n -e V3_QUOTE_BYTES=${V3_QUOTE_BYTES} \\\n -e SGX_VERIFIER_ADDRESS=${SGX_VERIFIER_ADDRESS} \\\n -e ATTESTATION_ADDRESS=${ATTESTATION_ADDRESS} \\\n -e PEM_CERTCHAIN_ADDRESS=${PEM_CERTCHAIN_ADDRESS} \\\n -e FMSPC=${FMSPC} \\\n -e TCB_FILE=${TCB_FILE} \\\n -e QE_IDENTITY_FILE=${QE_IDENTITY_FILE} \\\n -e PRIVATE_KEY=${PRIVATE_KEY} \\\n nethsurge/taiko-contract:surge-devnet \\\n sh -c \'curl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/tcb?fmspc=${FMSPC}" > ${TCB_FILE} && \\\n curl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/qe/identity" > ${QE_IDENTITY_FILE} && \\\n jq ".tcbInfo.fmspc |= ascii_downcase" ${TCB_FILE} > temp.json && \\\n mv temp.json ${TCB_FILE} && \\\n forge script ./script/layer1/SetDcapParams.s.sol:SetDcapParams \\\n --private-key ${PRIVATE_KEY} \\\n --fork-url ${L1_RPC_URL} \\\n --broadcast --evm-version cancun --ffi -vvvv --block-gas-limit 100000000 --legacy\'\n'})})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},9365:(e,n,r)=>{r.d(n,{A:()=>l});r(6540);var t=r(4164);const i={tabItem:"tabItem_Ymn6"};var s=r(4848);function l(e){let{children:n,hidden:r,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,t.A)(i.tabItem,l),hidden:r,children:n})}},1470:(e,n,r)=>{r.d(n,{A:()=>v});var t=r(6540),i=r(4164),s=r(3104),l=r(6347),a=r(205),o=r(7485),c=r(1682),d=r(679);function u(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:i}}=e;return{value:n,label:r,attributes:t,default:i}}))}(r);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function h(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function E(e){let{queryString:n=!1,groupId:r}=e;const i=(0,l.W6)(),s=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,o.aZ)(s),(0,t.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(i.location.search);n.set(s,e),i.replace({...i.location,search:n.toString()})}),[s,i])]}function x(e){const{defaultValue:n,queryString:r=!1,groupId:i}=e,s=p(e),[l,o]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!h({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:s}))),[c,u]=E({queryString:r,groupId:i}),[x,f]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,s]=(0,d.Dv)(r);return[i,(0,t.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:i}),_=(()=>{const e=c??x;return h({value:e,tabValues:s})?e:null})();(0,a.A)((()=>{_&&o(_)}),[_]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),f(e)}),[u,f,s]),tabValues:s}}var f=r(2303);const _={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=r(4848);function S(e){let{className:n,block:r,selectedValue:t,selectValue:l,tabValues:a}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),d=e=>{const n=e.currentTarget,r=o.indexOf(n),i=a[r].value;i!==t&&(c(n),l(i))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=o.indexOf(e.currentTarget)+1;n=o[r]??o[0];break}case"ArrowLeft":{const r=o.indexOf(e.currentTarget)-1;n=o[r]??o[o.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.A)("tabs",{"tabs--block":r},n),children:a.map((e=>{let{value:n,label:r,attributes:s}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>o.push(e),onKeyDown:u,onClick:d,...s,className:(0,i.A)("tabs__item",_.tabItem,s?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function A(e){let{lazy:n,children:r,selectedValue:s}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=l.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:(0,i.A)("margin-top--md",e.props.className)}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function R(e){const n=x(e);return(0,b.jsxs)("div",{className:(0,i.A)("tabs-container",_.tabList),children:[(0,b.jsx)(S,{...n,...e}),(0,b.jsx)(A,{...n,...e})]})}function v(e){const n=(0,f.A)();return(0,b.jsx)(R,{...e,children:u(e.children)},String(n))}},8453:(e,n,r)=>{r.d(n,{R:()=>l,x:()=>a});var t=r(6540);const i={},s=t.createContext(i);function l(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3021cf83.320b30bd.js b/assets/js/3021cf83.211a9e09.js similarity index 98% rename from assets/js/3021cf83.320b30bd.js rename to assets/js/3021cf83.211a9e09.js index c8e6250..f9c3912 100644 --- a/assets/js/3021cf83.320b30bd.js +++ b/assets/js/3021cf83.211a9e09.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[857],{5251:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=s(4848),n=s(8453);const r={sidebar_position:2},d="Getting Started",l={id:"getting-started",title:"Getting Started",description:"This guide will help you set up and run Surge rollup.",source:"@site/docs/getting-started.mdx",sourceDirName:".",slug:"/getting-started",permalink:"/docs/getting-started",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/getting-started.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Introduction to Surge",permalink:"/docs/intro"},next:{title:"Core Concepts",permalink:"/docs/core-concepts/"}},o={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"Next Steps",id:"next-steps",level:2}];function u(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"getting-started",children:"Getting Started"})}),"\n",(0,i.jsx)(t.p,{children:"This guide will help you set up and run Surge rollup."}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Intel processor with SGX (Software Guard Extensions) support for the prover"}),"\n",(0,i.jsx)(t.li,{children:"Docker and Docker Compose"}),"\n",(0,i.jsx)(t.li,{children:"Git"}),"\n",(0,i.jsx)(t.li,{children:"16GB RAM minimum"}),"\n",(0,i.jsx)(t.li,{children:"50GB free disk space"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"steps",children:"Steps"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Install Kurtosis (",(0,i.jsx)(t.a,{href:"https://docs.kurtosis.com/quickstart",children:"installation guide"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Deploy L1 (",(0,i.jsx)(t.a,{href:"/docs/Guides/deploy-l1",children:"guide"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Deploy L2 (",(0,i.jsx)(t.a,{href:"/docs/Guides/deploy-l2",children:"guide"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Set up Provers (",(0,i.jsx)(t.a,{href:"/docs/Guides/provers",children:"guide"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Deploy Relayer (",(0,i.jsx)(t.a,{href:"/docs/Guides/deploy-relay",children:"guide"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Launch Bridge UI (",(0,i.jsx)(t.a,{href:"/docs/Guides/deploy-bridge-ui",children:"guide"}),")"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/docs/core-concepts",children:"Learn Core Concepts"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://discord.gg/nethermind",children:"Join Discord"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/NethermindEth",children:"View Source"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>d,x:()=>l});var i=s(6540);const n={},r=i.createContext(n);function d(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[857],{5251:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=s(4848),n=s(8453);const r={sidebar_position:2},d="Getting Started",l={id:"getting-started",title:"Getting Started",description:"This guide will help you set up and run Surge rollup.",source:"@site/docs/getting-started.mdx",sourceDirName:".",slug:"/getting-started",permalink:"/docs/getting-started",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/getting-started.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Introduction to Surge",permalink:"/docs/intro"},next:{title:"Core Concepts",permalink:"/docs/core-concepts/"}},o={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"Next Steps",id:"next-steps",level:2}];function u(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"getting-started",children:"Getting Started"})}),"\n",(0,i.jsx)(t.p,{children:"This guide will help you set up and run Surge rollup."}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Intel processor with SGX (Software Guard Extensions) support for the prover"}),"\n",(0,i.jsx)(t.li,{children:"Docker and Docker Compose"}),"\n",(0,i.jsx)(t.li,{children:"Git"}),"\n",(0,i.jsx)(t.li,{children:"16GB RAM minimum"}),"\n",(0,i.jsx)(t.li,{children:"50GB free disk space"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"steps",children:"Steps"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Install Kurtosis (",(0,i.jsx)(t.a,{href:"https://docs.kurtosis.com/quickstart",children:"installation guide"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Deploy L1 (",(0,i.jsx)(t.a,{href:"/docs/Guides/deploy-l1",children:"guide"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Deploy L2 (",(0,i.jsx)(t.a,{href:"/docs/Guides/deploy-l2",children:"guide"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Set up Provers (",(0,i.jsx)(t.a,{href:"/docs/Guides/provers",children:"guide"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Deploy Relayer (",(0,i.jsx)(t.a,{href:"/docs/Guides/deploy-relay",children:"guide"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Launch Bridge UI (",(0,i.jsx)(t.a,{href:"/docs/Guides/deploy-bridge-ui",children:"guide"}),")"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/docs/core-concepts",children:"Learn Core Concepts"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://discord.gg/nethermind",children:"Join Discord"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/NethermindEth",children:"View Source"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>d,x:()=>l});var i=s(6540);const n={},r=i.createContext(n);function d(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43c4bd28.a63db757.js b/assets/js/43c4bd28.221d2848.js similarity index 99% rename from assets/js/43c4bd28.a63db757.js rename to assets/js/43c4bd28.221d2848.js index 9debfcd..7ed79f2 100644 --- a/assets/js/43c4bd28.a63db757.js +++ b/assets/js/43c4bd28.221d2848.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[481],{3091:(e,d,r)=>{r.r(d),r.d(d,{assets:()=>h,contentTitle:()=>i,default:()=>t,frontMatter:()=>c,metadata:()=>n,toc:()=>x});var s=r(4848),l=r(8453);const c={sidebar_position:1},i="Error Codes",n={id:"Troubleshooting/error-codes",title:"Error Codes",description:"This page contains a comprehensive list of error codes used in protocols. These codes are automatically generated from the source code.",source:"@site/docs/Troubleshooting/error-codes.mdx",sourceDirName:"Troubleshooting",slug:"/Troubleshooting/error-codes",permalink:"/docs/Troubleshooting/error-codes",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Troubleshooting/error-codes.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Troubleshooting",permalink:"/docs/Troubleshooting/"},next:{title:"Common Issues",permalink:"/docs/Troubleshooting/common-issues"}},h={},x=[{value:"shared/common/LibTrieProof.sol",id:"sharedcommonlibtrieproofsol",level:2},{value:"shared/common/AddressResolver.sol",id:"sharedcommonaddressresolversol",level:2},{value:"shared/common/LibBytes.sol",id:"sharedcommonlibbytessol",level:2},{value:"shared/common/LibAddress.sol",id:"sharedcommonlibaddresssol",level:2},{value:"shared/common/EssentialContract.sol",id:"sharedcommonessentialcontractsol",level:2},{value:"shared/common/AddressManager.sol",id:"sharedcommonaddressmanagersol",level:2},{value:"shared/tokenvault/BridgedERC20.sol",id:"sharedtokenvaultbridgederc20sol",level:2},{value:"shared/tokenvault/BaseNFTVault.sol",id:"sharedtokenvaultbasenftvaultsol",level:2},{value:"shared/tokenvault/BridgedERC1155.sol",id:"sharedtokenvaultbridgederc1155sol",level:2},{value:"shared/tokenvault/BridgedERC20V2.sol",id:"sharedtokenvaultbridgederc20v2sol",level:2},{value:"shared/tokenvault/LibBridgedToken.sol",id:"sharedtokenvaultlibbridgedtokensol",level:2},{value:"shared/tokenvault/BridgedERC721.sol",id:"sharedtokenvaultbridgederc721sol",level:2},{value:"shared/tokenvault/BaseVault.sol",id:"sharedtokenvaultbasevaultsol",level:2},{value:"shared/tokenvault/ERC20Vault.sol",id:"sharedtokenvaulterc20vaultsol",level:2},{value:"shared/bridge/QuotaManager.sol",id:"sharedbridgequotamanagersol",level:2},{value:"shared/bridge/Bridge.sol",id:"sharedbridgebridgesol",level:2},{value:"shared/signal/SignalService.sol",id:"sharedsignalsignalservicesol",level:2},{value:"layer1/based/LibVerifying.sol",id:"layer1basedlibverifyingsol",level:2},{value:"layer1/based/LibProving.sol",id:"layer1basedlibprovingsol",level:2},{value:"layer1/based/LibProposing.sol",id:"layer1basedlibproposingsol",level:2},{value:"layer1/based/TaikoL1.sol",id:"layer1basedtaikol1sol",level:2},{value:"layer1/based/LibUtils.sol",id:"layer1basedlibutilssol",level:2},{value:"lib/QuoteV3Auth/V3Parser.sol",id:"libquotev3authv3parsersol",level:2},{value:"layer1/verifiers/SP1Verifier.sol",id:"layer1verifierssp1verifiersol",level:2},{value:"layer1/verifiers/SgxVerifier.sol",id:"layer1verifierssgxverifiersol",level:2},{value:"layer1/verifiers/Risc0Verifier.sol",id:"layer1verifiersrisc0verifiersol",level:2},{value:"verifiers/compose/ComposeVerifier.sol",id:"verifierscomposecomposeverifiersol",level:2},{value:"layer1/provers/GuardianProver.sol",id:"layer1proversguardianproversol",level:2},{value:"layer1/tiers/ITierProvider.sol",id:"layer1tiersitierprovidersol",level:2},{value:"contracts/layer2/DelegateOwner.sol",id:"contractslayer2delegateownersol",level:2},{value:"layer2/based/TaikoL2.sol",id:"layer2basedtaikol2sol",level:2},{value:"layer2/based/Lib1559Math.sol",id:"layer2basedlib1559mathsol",level:2},{value:"test/shared/DeployCapability.sol",id:"testshareddeploycapabilitysol",level:2},{value:"layer1/verifiers/SP1Verifier.t.sol",id:"layer1verifierssp1verifiertsol",level:2},{value:"test/layer2/LibL2Signer.sol",id:"testlayer2libl2signersol",level:2},{value:"test/layer2/TaikoL2EIP1559Configurable.sol",id:"testlayer2taikol2eip1559configurablesol",level:2}];function j(e){const d={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.header,{children:(0,s.jsx)(d.h1,{id:"error-codes",children:"Error Codes"})}),"\n",(0,s.jsx)(d.p,{children:"This page contains a comprehensive list of error codes used in protocols. These codes are automatically generated from the source code."}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonlibtrieproofsol",children:"shared/common/LibTrieProof.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"LTP_INVALID_ACCOUNT_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x20a66ad8"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"LTP_INVALID_INCLUSION_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x8d9a4db3"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonaddressresolversol",children:"shared/common/AddressResolver.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RESOLVER_DENIED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1b0b999e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RESOLVER_INVALID_MANAGER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x8ed88b25"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RESOLVER_UNEXPECTED_CHAINID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa12e8fa9"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RESOLVER_ZERO_ADDR(uint64 chainId, bytes32 name)"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x7210df68"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonlibbytessol",children:"shared/common/LibBytes.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"INNER_ERROR(bytes innerError)"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xbe40ece2"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonlibaddresssol",children:"shared/common/LibAddress.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ETH_TRANSFER_FAILED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x98ce269a"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonessentialcontractsol",children:"shared/common/EssentialContract.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"INVALID_PAUSE_STATUS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xbae6e2a9"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"FUNC_NOT_IMPLEMENTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x18571f1e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"REENTRANT_CALL()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xdfc60d85"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ZERO_ADDRESS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x538ba4f9"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ZERO_VALUE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xec732959"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"FUNCTION_DISABLED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa87dd7cf"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonaddressmanagersol",children:"shared/common/AddressManager.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"AM_ADDRESS_ALREADY_SET()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa8830893"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbridgederc20sol",children:"shared/tokenvault/BridgedERC20.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc118d2f3"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_MINT_DISALLOWED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x270bf775"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbasenftvaultsol",children:"shared/tokenvault/BaseNFTVault.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_TOKEN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x03f8a7d3"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_AMOUNT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x85326476"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INTERFACE_NOT_SUPPORTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x7dd22bea"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_TOKEN_ARRAY_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xcb745208"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbridgederc1155sol",children:"shared/tokenvault/BridgedERC1155.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc118d2f3"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbridgederc20v2sol",children:"shared/tokenvault/BridgedERC20V2.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_DEADLINE_EXPIRED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x2d5c4e9a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_SIG()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe1de4396"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultlibbridgedtokensol",children:"shared/tokenvault/LibBridgedToken.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc118d2f3"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_TO_ADDR()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x30a4b274"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbridgederc721sol",children:"shared/tokenvault/BridgedERC721.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc118d2f3"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_BURN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x358bf3d9"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbasevaultsol",children:"shared/tokenvault/BaseVault.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INSUFFICIENT_FEE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x0bc67058"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_TO_ADDR()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5b50f3f9"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_PERMISSION_DENIED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x2583296b"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaulterc20vaultsol",children:"shared/tokenvault/ERC20Vault.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_BTOKEN_BLACKLISTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x75c42fc1"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_CTOKEN_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5f3a3af6"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_TOKEN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x03f8a7d3"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_AMOUNT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x85326476"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_CTOKEN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x8257f7f5"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_NEW_BTOKEN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xdc63f987"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_LAST_MIGRATION_TOO_CLOSE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x463a6bf6"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedbridgequotamanagersol",children:"shared/bridge/QuotaManager.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"QM_INVALID_PARAM()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x6f7f6e58"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"QM_OUT_OF_QUOTA()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x51d8fe3a"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedbridgebridgesol",children:"shared/bridge/Bridge.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_CHAINID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe363bba8"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_CONTEXT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5ceed173"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_FEE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc9f51787"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_GAS_LIMIT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x08c2ad53"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_STATUS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x67624eb4"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_VALUE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x958557be"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INSUFFICIENT_GAS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5fbdff73"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_MESSAGE_NOT_SENT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xab035ad5"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_OUT_OF_ETH_QUOTA()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd615bef4"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_PERMISSION_DENIED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe56dc386"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_PROOF_TOO_LARGE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1e3b03c9"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_RETRY_FAILED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x161e3ead"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_SIGNAL_NOT_RECEIVED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa2826398"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedsignalsignalservicesol",children:"shared/signal/SignalService.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_EMPTY_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x2e4b6bbc"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_INVALID_HOPS_WITH_LOOP()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x906c584e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_INVALID_LAST_HOP_CHAINID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe2fe089c"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_INVALID_MID_HOP_CHAINID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xeaac446a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_INVALID_STATE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x98f26f45"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_SIGNAL_NOT_FOUND()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x738afa05"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_UNAUTHORIZED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1f67751f"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1basedlibverifyingsol",children:"layer1/based/LibVerifying.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_BLOCK_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5d8690aa"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_CONFIG()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x88eb2934"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_TRANSITION_ID_ZERO()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd4345b97"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_TOO_LATE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x241d70fd"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1basedlibprovingsol",children:"layer1/based/LibProving.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_ALREADY_CONTESTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x82ef1699"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_ALREADY_PROVED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x9d497731"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_BLOCK_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5d8690aa"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_CANNOT_CONTEST()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xde2c7bfc"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_DIFF_VERIFIER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x4f29db4e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x36c7c689"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PAUSE_STATUS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd13a013a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_TIER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1a32f513"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_TRANSITION()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x2fdbbd42"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_NOT_ASSIGNED_PROVER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x86168ab4"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_PROVING_PAUSED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x66031caa"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1basedlibproposingsol",children:"layer1/based/LibProposing.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_BLOB_NOT_AVAILABLE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xdf9969ef"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_BLOB_NOT_FOUND()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x9e7e2ddd"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_ANCHOR_BLOCK()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x618e4902"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_CUSTOM_PROPOSER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc043062a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x36c7c689"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PROPOSER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd6e2c5a0"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_TIMESTAMP()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x13f7f80d"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_LIVENESS_BOND_NOT_RECEIVED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x37e6fc42"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_TOO_MANY_BLOCKS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x51ec7d53"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_UNEXPECTED_PARENT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1a83d90e"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1basedtaikol1sol",children:"layer1/based/TaikoL1.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_FORK_ERROR()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x3a0e4c1a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x36c7c689"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1basedlibutilssol",children:"layer1/based/LibUtils.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_BLOCK_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5d8690aa"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_BLOCK_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x8a1c400f"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x36c7c689"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_GENESIS_HASH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd6d0f755"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_TRANSITION_NOT_FOUND()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x727b1d61"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_UNEXPECTED_TRANSITION_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x67a1907f"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"libquotev3authv3parsersol",children:"lib/QuoteV3Auth/V3Parser.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_QUOTE_LENGTN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x9a800458"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_QUOTE_MEMBER_LENGTN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x7841ff9e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_QEREPORT_LENGTN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x03dc2590"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_UNSUPPORT_CERTIFICATION_TYPE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x84f41c44"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_CERTIFICATION_CHAIN_SIZE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x22ff290f"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_CERTIFICATION_CHAIN_DATA()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc46fc8f6"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_ECDSA_SIGNATURE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x46ac673f"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_QEAUTHDATA_SIZE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x0c6543ad"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1verifierssp1verifiersol",children:"layer1/verifiers/SP1Verifier.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SP1_INVALID_PROGRAM_VKEY()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa068e7d2"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SP1_INVALID_AGGREGATION_VKEY()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x0e5a298b"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SP1_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa8907a03"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SP1_INVALID_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xb9e4dcf2"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1verifierssgxverifiersol",children:"layer1/verifiers/SgxVerifier.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SGX_ALREADY_ATTESTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa2395279"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SGX_INVALID_ATTESTATION()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x72ff9e3c"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SGX_INVALID_INSTANCE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1877af9a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SGX_INVALID_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x7bb2c129"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SGX_RA_NOT_SUPPORTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xfd85d29d"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1verifiersrisc0verifiersol",children:"layer1/verifiers/Risc0Verifier.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RISC_ZERO_INVALID_BLOCK_PROOF_IMAGE_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x749091ae"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RISC_ZERO_INVALID_AGGREGATION_IMAGE_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc8cde2c0"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RISC_ZERO_INVALID_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x444c8c2c"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"verifierscomposecomposeverifiersol",children:"verifiers/compose/ComposeVerifier.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"CV_DUPLICATE_SUBPROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa9270eef"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"CV_INVALID_CALLER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x57dc3ccd"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"CV_INVALID_SUB_VERIFIER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x26998179"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"CV_INVALID_SUBPROOF_LENGTH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x70fc7004"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"CV_SUB_VERIFIER_NOT_FOUND()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x076f5707"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1proversguardianproversol",children:"layer1/provers/GuardianProver.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GP_INVALID_GUARDIAN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe81e409d"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GP_INVALID_GUARDIAN_SET()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x72fca45d"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GP_INVALID_MIN_GUARDIANS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xb8143131"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GP_INVALID_STATUS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x6c242ee7"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GV_PERMISSION_DENIED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x6e66d5f7"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GV_ZERO_ADDRESS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x436b7f1c"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1tiersitierprovidersol",children:"layer1/tiers/ITierProvider.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"TIER_NOT_FOUND()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd04c3d84"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"contractslayer2delegateownersol",children:"contracts/layer2/DelegateOwner.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_DRYRUN_SUCCEEDED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xbdfab8df"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_INVALID_PARAM()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc3c64b5b"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_INVALID_SENDER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xcdb6b920"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_INVALID_TARGET()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe4379036"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_INVALID_TX_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x11cff9ae"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_PERMISSION_DENIED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xb1bff0fa"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer2basedtaikol2sol",children:"layer2/based/TaikoL2.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_BASEFEE_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x6daa9a9e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_FORK_ERROR()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1799c89b"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_L1_CHAIN_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x413cd128"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_L2_CHAIN_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x8f972ecb"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_PARAM()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x053fd547"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_SENDER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x6494e9f7"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_PUBLIC_INPUT_HASH_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd719258d"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_TOO_LATE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xb41f3c82"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer2basedlib1559mathsol",children:"layer2/based/Lib1559Math.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"EIP1559_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc52de372"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"testshareddeploycapabilitysol",children:"test/shared/DeployCapability.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ADDRESS_NULL()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc61d2985"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1verifierssp1verifiertsol",children:"layer1/verifiers/SP1Verifier.t.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SP1_INVALID_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xb9e4dcf2"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"testlayer2libl2signersol",children:"test/layer2/LibL2Signer.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_GOLDEN_TOUCH_K()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xbcd2d90d"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"testlayer2taikol2eip1559configurablesol",children:"test/layer2/TaikoL2EIP1559Configurable.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_CONFIG()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x0186236b"})})]})})]})]})}function t(e={}){const{wrapper:d}={...(0,l.R)(),...e.components};return d?(0,s.jsx)(d,{...e,children:(0,s.jsx)(j,{...e})}):j(e)}},8453:(e,d,r)=>{r.d(d,{R:()=>i,x:()=>n});var s=r(6540);const l={},c=s.createContext(l);function i(e){const d=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function n(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),s.createElement(c.Provider,{value:d},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[481],{3091:(e,d,r)=>{r.r(d),r.d(d,{assets:()=>h,contentTitle:()=>i,default:()=>t,frontMatter:()=>c,metadata:()=>n,toc:()=>x});var s=r(4848),l=r(8453);const c={sidebar_position:1},i="Error Codes",n={id:"Troubleshooting/error-codes",title:"Error Codes",description:"This page contains a comprehensive list of error codes used in protocols. These codes are automatically generated from the source code.",source:"@site/docs/Troubleshooting/error-codes.mdx",sourceDirName:"Troubleshooting",slug:"/Troubleshooting/error-codes",permalink:"/docs/Troubleshooting/error-codes",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Troubleshooting/error-codes.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Troubleshooting",permalink:"/docs/Troubleshooting/"},next:{title:"Common Issues",permalink:"/docs/Troubleshooting/common-issues"}},h={},x=[{value:"shared/common/LibTrieProof.sol",id:"sharedcommonlibtrieproofsol",level:2},{value:"shared/common/AddressResolver.sol",id:"sharedcommonaddressresolversol",level:2},{value:"shared/common/LibBytes.sol",id:"sharedcommonlibbytessol",level:2},{value:"shared/common/LibAddress.sol",id:"sharedcommonlibaddresssol",level:2},{value:"shared/common/EssentialContract.sol",id:"sharedcommonessentialcontractsol",level:2},{value:"shared/common/AddressManager.sol",id:"sharedcommonaddressmanagersol",level:2},{value:"shared/tokenvault/BridgedERC20.sol",id:"sharedtokenvaultbridgederc20sol",level:2},{value:"shared/tokenvault/BaseNFTVault.sol",id:"sharedtokenvaultbasenftvaultsol",level:2},{value:"shared/tokenvault/BridgedERC1155.sol",id:"sharedtokenvaultbridgederc1155sol",level:2},{value:"shared/tokenvault/BridgedERC20V2.sol",id:"sharedtokenvaultbridgederc20v2sol",level:2},{value:"shared/tokenvault/LibBridgedToken.sol",id:"sharedtokenvaultlibbridgedtokensol",level:2},{value:"shared/tokenvault/BridgedERC721.sol",id:"sharedtokenvaultbridgederc721sol",level:2},{value:"shared/tokenvault/BaseVault.sol",id:"sharedtokenvaultbasevaultsol",level:2},{value:"shared/tokenvault/ERC20Vault.sol",id:"sharedtokenvaulterc20vaultsol",level:2},{value:"shared/bridge/QuotaManager.sol",id:"sharedbridgequotamanagersol",level:2},{value:"shared/bridge/Bridge.sol",id:"sharedbridgebridgesol",level:2},{value:"shared/signal/SignalService.sol",id:"sharedsignalsignalservicesol",level:2},{value:"layer1/based/LibVerifying.sol",id:"layer1basedlibverifyingsol",level:2},{value:"layer1/based/LibProving.sol",id:"layer1basedlibprovingsol",level:2},{value:"layer1/based/LibProposing.sol",id:"layer1basedlibproposingsol",level:2},{value:"layer1/based/TaikoL1.sol",id:"layer1basedtaikol1sol",level:2},{value:"layer1/based/LibUtils.sol",id:"layer1basedlibutilssol",level:2},{value:"lib/QuoteV3Auth/V3Parser.sol",id:"libquotev3authv3parsersol",level:2},{value:"layer1/verifiers/SP1Verifier.sol",id:"layer1verifierssp1verifiersol",level:2},{value:"layer1/verifiers/SgxVerifier.sol",id:"layer1verifierssgxverifiersol",level:2},{value:"layer1/verifiers/Risc0Verifier.sol",id:"layer1verifiersrisc0verifiersol",level:2},{value:"verifiers/compose/ComposeVerifier.sol",id:"verifierscomposecomposeverifiersol",level:2},{value:"layer1/provers/GuardianProver.sol",id:"layer1proversguardianproversol",level:2},{value:"layer1/tiers/ITierProvider.sol",id:"layer1tiersitierprovidersol",level:2},{value:"contracts/layer2/DelegateOwner.sol",id:"contractslayer2delegateownersol",level:2},{value:"layer2/based/TaikoL2.sol",id:"layer2basedtaikol2sol",level:2},{value:"layer2/based/Lib1559Math.sol",id:"layer2basedlib1559mathsol",level:2},{value:"test/shared/DeployCapability.sol",id:"testshareddeploycapabilitysol",level:2},{value:"layer1/verifiers/SP1Verifier.t.sol",id:"layer1verifierssp1verifiertsol",level:2},{value:"test/layer2/LibL2Signer.sol",id:"testlayer2libl2signersol",level:2},{value:"test/layer2/TaikoL2EIP1559Configurable.sol",id:"testlayer2taikol2eip1559configurablesol",level:2}];function j(e){const d={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.header,{children:(0,s.jsx)(d.h1,{id:"error-codes",children:"Error Codes"})}),"\n",(0,s.jsx)(d.p,{children:"This page contains a comprehensive list of error codes used in protocols. These codes are automatically generated from the source code."}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonlibtrieproofsol",children:"shared/common/LibTrieProof.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"LTP_INVALID_ACCOUNT_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x20a66ad8"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"LTP_INVALID_INCLUSION_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x8d9a4db3"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonaddressresolversol",children:"shared/common/AddressResolver.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RESOLVER_DENIED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1b0b999e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RESOLVER_INVALID_MANAGER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x8ed88b25"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RESOLVER_UNEXPECTED_CHAINID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa12e8fa9"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RESOLVER_ZERO_ADDR(uint64 chainId, bytes32 name)"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x7210df68"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonlibbytessol",children:"shared/common/LibBytes.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"INNER_ERROR(bytes innerError)"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xbe40ece2"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonlibaddresssol",children:"shared/common/LibAddress.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ETH_TRANSFER_FAILED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x98ce269a"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonessentialcontractsol",children:"shared/common/EssentialContract.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"INVALID_PAUSE_STATUS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xbae6e2a9"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"FUNC_NOT_IMPLEMENTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x18571f1e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"REENTRANT_CALL()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xdfc60d85"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ZERO_ADDRESS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x538ba4f9"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ZERO_VALUE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xec732959"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"FUNCTION_DISABLED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa87dd7cf"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedcommonaddressmanagersol",children:"shared/common/AddressManager.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"AM_ADDRESS_ALREADY_SET()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa8830893"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbridgederc20sol",children:"shared/tokenvault/BridgedERC20.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc118d2f3"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_MINT_DISALLOWED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x270bf775"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbasenftvaultsol",children:"shared/tokenvault/BaseNFTVault.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_TOKEN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x03f8a7d3"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_AMOUNT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x85326476"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INTERFACE_NOT_SUPPORTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x7dd22bea"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_TOKEN_ARRAY_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xcb745208"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbridgederc1155sol",children:"shared/tokenvault/BridgedERC1155.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc118d2f3"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbridgederc20v2sol",children:"shared/tokenvault/BridgedERC20V2.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_DEADLINE_EXPIRED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x2d5c4e9a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_SIG()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe1de4396"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultlibbridgedtokensol",children:"shared/tokenvault/LibBridgedToken.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc118d2f3"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_TO_ADDR()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x30a4b274"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbridgederc721sol",children:"shared/tokenvault/BridgedERC721.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc118d2f3"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"BTOKEN_INVALID_BURN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x358bf3d9"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaultbasevaultsol",children:"shared/tokenvault/BaseVault.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INSUFFICIENT_FEE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x0bc67058"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_TO_ADDR()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5b50f3f9"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_PERMISSION_DENIED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x2583296b"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedtokenvaulterc20vaultsol",children:"shared/tokenvault/ERC20Vault.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_BTOKEN_BLACKLISTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x75c42fc1"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_CTOKEN_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5f3a3af6"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_TOKEN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x03f8a7d3"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_AMOUNT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x85326476"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_CTOKEN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x8257f7f5"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_INVALID_NEW_BTOKEN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xdc63f987"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VAULT_LAST_MIGRATION_TOO_CLOSE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x463a6bf6"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedbridgequotamanagersol",children:"shared/bridge/QuotaManager.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"QM_INVALID_PARAM()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x6f7f6e58"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"QM_OUT_OF_QUOTA()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x51d8fe3a"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedbridgebridgesol",children:"shared/bridge/Bridge.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_CHAINID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe363bba8"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_CONTEXT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5ceed173"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_FEE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc9f51787"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_GAS_LIMIT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x08c2ad53"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_STATUS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x67624eb4"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INVALID_VALUE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x958557be"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_INSUFFICIENT_GAS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5fbdff73"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_MESSAGE_NOT_SENT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xab035ad5"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_OUT_OF_ETH_QUOTA()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd615bef4"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_PERMISSION_DENIED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe56dc386"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_PROOF_TOO_LARGE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1e3b03c9"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_RETRY_FAILED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x161e3ead"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"B_SIGNAL_NOT_RECEIVED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa2826398"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"sharedsignalsignalservicesol",children:"shared/signal/SignalService.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_EMPTY_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x2e4b6bbc"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_INVALID_HOPS_WITH_LOOP()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x906c584e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_INVALID_LAST_HOP_CHAINID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe2fe089c"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_INVALID_MID_HOP_CHAINID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xeaac446a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_INVALID_STATE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x98f26f45"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_SIGNAL_NOT_FOUND()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x738afa05"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SS_UNAUTHORIZED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1f67751f"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1basedlibverifyingsol",children:"layer1/based/LibVerifying.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_BLOCK_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5d8690aa"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_CONFIG()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x88eb2934"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_TRANSITION_ID_ZERO()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd4345b97"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_TOO_LATE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x241d70fd"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1basedlibprovingsol",children:"layer1/based/LibProving.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_ALREADY_CONTESTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x82ef1699"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_ALREADY_PROVED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x9d497731"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_BLOCK_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5d8690aa"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_CANNOT_CONTEST()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xde2c7bfc"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_DIFF_VERIFIER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x4f29db4e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x36c7c689"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PAUSE_STATUS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd13a013a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_TIER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1a32f513"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_TRANSITION()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x2fdbbd42"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_NOT_ASSIGNED_PROVER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x86168ab4"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_PROVING_PAUSED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x66031caa"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1basedlibproposingsol",children:"layer1/based/LibProposing.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_BLOB_NOT_AVAILABLE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xdf9969ef"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_BLOB_NOT_FOUND()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x9e7e2ddd"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_ANCHOR_BLOCK()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x618e4902"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_CUSTOM_PROPOSER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc043062a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x36c7c689"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PROPOSER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd6e2c5a0"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_TIMESTAMP()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x13f7f80d"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_LIVENESS_BOND_NOT_RECEIVED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x37e6fc42"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_TOO_MANY_BLOCKS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x51ec7d53"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_UNEXPECTED_PARENT()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1a83d90e"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1basedtaikol1sol",children:"layer1/based/TaikoL1.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_FORK_ERROR()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x3a0e4c1a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x36c7c689"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1basedlibutilssol",children:"layer1/based/LibUtils.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_BLOCK_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x5d8690aa"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_BLOCK_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x8a1c400f"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x36c7c689"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_INVALID_GENESIS_HASH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd6d0f755"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_TRANSITION_NOT_FOUND()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x727b1d61"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L1_UNEXPECTED_TRANSITION_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x67a1907f"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"libquotev3authv3parsersol",children:"lib/QuoteV3Auth/V3Parser.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_QUOTE_LENGTN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x9a800458"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_QUOTE_MEMBER_LENGTN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x7841ff9e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_QEREPORT_LENGTN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x03dc2590"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_UNSUPPORT_CERTIFICATION_TYPE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x84f41c44"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_CERTIFICATION_CHAIN_SIZE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x22ff290f"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_CERTIFICATION_CHAIN_DATA()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc46fc8f6"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_ECDSA_SIGNATURE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x46ac673f"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"V3PARSER_INVALID_QEAUTHDATA_SIZE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x0c6543ad"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1verifierssp1verifiersol",children:"layer1/verifiers/SP1Verifier.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SP1_INVALID_PROGRAM_VKEY()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa068e7d2"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SP1_INVALID_AGGREGATION_VKEY()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x0e5a298b"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SP1_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa8907a03"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SP1_INVALID_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xb9e4dcf2"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1verifierssgxverifiersol",children:"layer1/verifiers/SgxVerifier.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SGX_ALREADY_ATTESTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa2395279"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SGX_INVALID_ATTESTATION()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x72ff9e3c"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SGX_INVALID_INSTANCE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1877af9a"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SGX_INVALID_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x7bb2c129"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SGX_RA_NOT_SUPPORTED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xfd85d29d"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1verifiersrisc0verifiersol",children:"layer1/verifiers/Risc0Verifier.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RISC_ZERO_INVALID_BLOCK_PROOF_IMAGE_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x749091ae"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RISC_ZERO_INVALID_AGGREGATION_IMAGE_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc8cde2c0"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RISC_ZERO_INVALID_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x444c8c2c"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"verifierscomposecomposeverifiersol",children:"verifiers/compose/ComposeVerifier.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"CV_DUPLICATE_SUBPROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xa9270eef"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"CV_INVALID_CALLER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x57dc3ccd"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"CV_INVALID_SUB_VERIFIER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x26998179"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"CV_INVALID_SUBPROOF_LENGTH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x70fc7004"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"CV_SUB_VERIFIER_NOT_FOUND()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x076f5707"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1proversguardianproversol",children:"layer1/provers/GuardianProver.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GP_INVALID_GUARDIAN()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe81e409d"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GP_INVALID_GUARDIAN_SET()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x72fca45d"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GP_INVALID_MIN_GUARDIANS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xb8143131"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GP_INVALID_STATUS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x6c242ee7"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GV_PERMISSION_DENIED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x6e66d5f7"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"GV_ZERO_ADDRESS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x436b7f1c"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1tiersitierprovidersol",children:"layer1/tiers/ITierProvider.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"TIER_NOT_FOUND()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd04c3d84"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"contractslayer2delegateownersol",children:"contracts/layer2/DelegateOwner.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_DRYRUN_SUCCEEDED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xbdfab8df"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_INVALID_PARAM()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc3c64b5b"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_INVALID_SENDER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xcdb6b920"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_INVALID_TARGET()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xe4379036"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_INVALID_TX_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x11cff9ae"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DO_PERMISSION_DENIED()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xb1bff0fa"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer2basedtaikol2sol",children:"layer2/based/TaikoL2.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_BASEFEE_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x6daa9a9e"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_FORK_ERROR()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x1799c89b"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_L1_CHAIN_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x413cd128"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_L2_CHAIN_ID()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x8f972ecb"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_PARAM()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x053fd547"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_SENDER()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x6494e9f7"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_PUBLIC_INPUT_HASH_MISMATCH()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xd719258d"})})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_TOO_LATE()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xb41f3c82"})})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"layer2basedlib1559mathsol",children:"layer2/based/Lib1559Math.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"EIP1559_INVALID_PARAMS()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc52de372"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"testshareddeploycapabilitysol",children:"test/shared/DeployCapability.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ADDRESS_NULL()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xc61d2985"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"layer1verifierssp1verifiertsol",children:"layer1/verifiers/SP1Verifier.t.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SP1_INVALID_PROOF()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xb9e4dcf2"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"testlayer2libl2signersol",children:"test/layer2/LibL2Signer.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_GOLDEN_TOUCH_K()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0xbcd2d90d"})})]})})]}),"\n",(0,s.jsx)(d.h2,{id:"testlayer2taikol2eip1559configurablesol",children:"test/layer2/TaikoL2EIP1559Configurable.sol"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Error"}),(0,s.jsx)(d.th,{children:"Code"})]})}),(0,s.jsx)(d.tbody,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"L2_INVALID_CONFIG()"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0x0186236b"})})]})})]})]})}function t(e={}){const{wrapper:d}={...(0,l.R)(),...e.components};return d?(0,s.jsx)(d,{...e,children:(0,s.jsx)(j,{...e})}):j(e)}},8453:(e,d,r)=>{r.d(d,{R:()=>i,x:()=>n});var s=r(6540);const l={},c=s.createContext(l);function i(e){const d=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function n(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),s.createElement(c.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4848ee62.9215d490.js b/assets/js/4848ee62.c516d13c.js similarity index 98% rename from assets/js/4848ee62.9215d490.js rename to assets/js/4848ee62.c516d13c.js index e7a2706..f30c713 100644 --- a/assets/js/4848ee62.9215d490.js +++ b/assets/js/4848ee62.c516d13c.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[185],{986:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var o=t(4848),i=t(8453);const s={sidebar_position:1},r="Deploy L1",l={id:"Guides/deploy-l1",title:"Deploy L1",description:"In this guide, we'll walk through the process of deploying the L1 network using Kurtosis. This will also deploy the Taiko protocol on L1.",source:"@site/docs/Guides/deploy-l1.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-l1",permalink:"/docs/Guides/deploy-l1",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-l1.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Block Proposer Guide",permalink:"/docs/core-concepts/sequencing"},next:{title:"Deploy Protocols on L1",permalink:"/docs/Guides/deploy-l1-protocols"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installation Steps",id:"installation-steps",level:2},{value:"1. Install Kurtosis",id:"1-install-kurtosis",level:3},{value:"2. Clone the Repository",id:"2-clone-the-repository",level:3},{value:"3. Switch to the Correct Branch",id:"3-switch-to-the-correct-branch",level:3},{value:"4. Deploy Using Kurtosis",id:"4-deploy-using-kurtosis",level:3},{value:"Verification",id:"verification",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function a(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"deploy-l1",children:"Deploy L1"})}),"\n",(0,o.jsx)(n.p,{children:"In this guide, we'll walk through the process of deploying the L1 network using Kurtosis. This will also deploy the Taiko protocol on L1."}),"\n",(0,o.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Git and Docker installed on your system"}),"\n",(0,o.jsx)(n.li,{children:"Terminal access"}),"\n",(0,o.jsx)(n.li,{children:"Basic command line knowledge"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"installation-steps",children:"Installation Steps"}),"\n",(0,o.jsx)(n.h3,{id:"1-install-kurtosis",children:"1. Install Kurtosis"}),"\n",(0,o.jsx)(n.p,{children:"First, you'll need to install Kurtosis on your system. Follow the installation guide at:"}),"\n",(0,o.jsx)("div",{className:"flex justify-center my-8",children:(0,o.jsx)("a",{className:"button button--primary button--lg",href:"https://docs.kurtosis.com/quickstart",target:"_blank",rel:"noopener noreferrer",children:(0,o.jsx)(n.p,{children:"Kurtosis Installation Guide \u2197"})})}),"\n",(0,o.jsx)(n.h3,{id:"2-clone-the-repository",children:"2. Clone the Repository"}),"\n",(0,o.jsx)(n.p,{children:"Clone the Preconfirm devnet package repository:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/preconfirm-devnet-package.git\n"})}),"\n",(0,o.jsx)(n.h3,{id:"3-switch-to-the-correct-branch",children:"3. Switch to the Correct Branch"}),"\n",(0,o.jsxs)(n.p,{children:["Navigate to the cloned directory and checkout the ",(0,o.jsx)(n.code,{children:"surge/devnet"})," branch:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"cd preconfirm-devnet-package\ngit checkout surge/devnet\n"})}),"\n",(0,o.jsx)(n.h3,{id:"4-deploy-using-kurtosis",children:"4. Deploy Using Kurtosis"}),"\n",(0,o.jsx)(n.p,{children:"Run Kurtosis with the following command to deploy the L1 network:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"kurtosis run --enclave surge-devnet . --args-file network_params.yaml\n"})}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"This command will also automatically deploy the Taiko protocol on L1 for you."})}),"\n",(0,o.jsx)(n.h2,{id:"verification",children:"Verification"}),"\n",(0,o.jsx)(n.p,{children:"After running the deployment command, Kurtosis will start setting up your L1 environment. You should see output in your terminal indicating the progress of the deployment."}),"\n",(0,o.jsx)(n.admonition,{title:"What's Next?",type:"info",children:(0,o.jsx)(n.p,{children:"Once your L1 deployment is complete, you can proceed with setting up your prover or configuring additional network parameters."})}),"\n",(0,o.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,o.jsx)(n.p,{children:"If you encounter any issues during deployment:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Ensure all prerequisites are properly installed"}),"\n",(0,o.jsxs)(n.li,{children:["Verify you're on the correct branch (",(0,o.jsx)(n.code,{children:"surge/devnet"}),")"]}),"\n",(0,o.jsxs)(n.li,{children:["Check that the ",(0,o.jsx)(n.code,{children:"network_params.yaml"})," file exists and is properly configured"]}),"\n",(0,o.jsx)(n.li,{children:"Make sure Kurtosis is running correctly on your system"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>l});var o=t(6540);const i={},s=o.createContext(i);function r(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[185],{986:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var o=t(4848),i=t(8453);const s={sidebar_position:1},r="Deploy L1",l={id:"Guides/deploy-l1",title:"Deploy L1",description:"In this guide, we'll walk through the process of deploying the L1 network using Kurtosis. This will also deploy the Taiko protocol on L1.",source:"@site/docs/Guides/deploy-l1.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-l1",permalink:"/docs/Guides/deploy-l1",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-l1.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Block Proposer Guide",permalink:"/docs/core-concepts/sequencing"},next:{title:"Deploy Protocols on L1",permalink:"/docs/Guides/deploy-l1-protocols"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installation Steps",id:"installation-steps",level:2},{value:"1. Install Kurtosis",id:"1-install-kurtosis",level:3},{value:"2. Clone the Repository",id:"2-clone-the-repository",level:3},{value:"3. Switch to the Correct Branch",id:"3-switch-to-the-correct-branch",level:3},{value:"4. Deploy Using Kurtosis",id:"4-deploy-using-kurtosis",level:3},{value:"Verification",id:"verification",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function a(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"deploy-l1",children:"Deploy L1"})}),"\n",(0,o.jsx)(n.p,{children:"In this guide, we'll walk through the process of deploying the L1 network using Kurtosis. This will also deploy the Taiko protocol on L1."}),"\n",(0,o.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Git and Docker installed on your system"}),"\n",(0,o.jsx)(n.li,{children:"Terminal access"}),"\n",(0,o.jsx)(n.li,{children:"Basic command line knowledge"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"installation-steps",children:"Installation Steps"}),"\n",(0,o.jsx)(n.h3,{id:"1-install-kurtosis",children:"1. Install Kurtosis"}),"\n",(0,o.jsx)(n.p,{children:"First, you'll need to install Kurtosis on your system. Follow the installation guide at:"}),"\n",(0,o.jsx)("div",{className:"flex justify-center my-8",children:(0,o.jsx)("a",{className:"button button--primary button--lg",href:"https://docs.kurtosis.com/quickstart",target:"_blank",rel:"noopener noreferrer",children:(0,o.jsx)(n.p,{children:"Kurtosis Installation Guide \u2197"})})}),"\n",(0,o.jsx)(n.h3,{id:"2-clone-the-repository",children:"2. Clone the Repository"}),"\n",(0,o.jsx)(n.p,{children:"Clone the Preconfirm devnet package repository:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/preconfirm-devnet-package.git\n"})}),"\n",(0,o.jsx)(n.h3,{id:"3-switch-to-the-correct-branch",children:"3. Switch to the Correct Branch"}),"\n",(0,o.jsxs)(n.p,{children:["Navigate to the cloned directory and checkout the ",(0,o.jsx)(n.code,{children:"surge/devnet"})," branch:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"cd preconfirm-devnet-package\ngit checkout surge/devnet\n"})}),"\n",(0,o.jsx)(n.h3,{id:"4-deploy-using-kurtosis",children:"4. Deploy Using Kurtosis"}),"\n",(0,o.jsx)(n.p,{children:"Run Kurtosis with the following command to deploy the L1 network:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"kurtosis run --enclave surge-devnet . --args-file network_params.yaml\n"})}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"This command will also automatically deploy the Taiko protocol on L1 for you."})}),"\n",(0,o.jsx)(n.h2,{id:"verification",children:"Verification"}),"\n",(0,o.jsx)(n.p,{children:"After running the deployment command, Kurtosis will start setting up your L1 environment. You should see output in your terminal indicating the progress of the deployment."}),"\n",(0,o.jsx)(n.admonition,{title:"What's Next?",type:"info",children:(0,o.jsx)(n.p,{children:"Once your L1 deployment is complete, you can proceed with setting up your prover or configuring additional network parameters."})}),"\n",(0,o.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,o.jsx)(n.p,{children:"If you encounter any issues during deployment:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Ensure all prerequisites are properly installed"}),"\n",(0,o.jsxs)(n.li,{children:["Verify you're on the correct branch (",(0,o.jsx)(n.code,{children:"surge/devnet"}),")"]}),"\n",(0,o.jsxs)(n.li,{children:["Check that the ",(0,o.jsx)(n.code,{children:"network_params.yaml"})," file exists and is properly configured"]}),"\n",(0,o.jsx)(n.li,{children:"Make sure Kurtosis is running correctly on your system"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>l});var o=t(6540);const i={},s=o.createContext(i);function r(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6925427d.8d0b7495.js b/assets/js/6925427d.fe521144.js similarity index 99% rename from assets/js/6925427d.8d0b7495.js rename to assets/js/6925427d.fe521144.js index 6118072..657992a 100644 --- a/assets/js/6925427d.8d0b7495.js +++ b/assets/js/6925427d.fe521144.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[220],{6311:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>u,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var t=r(4848),s=r(8453),o=r(1470),l=r(9365);const i={sidebar_position:5},a="Deploy Relayer",c={id:"Guides/deploy-relay",title:"Deploy Relayer",description:"This guide walks you through the process of deploying and configuring the Surge Relayer.",source:"@site/docs/Guides/deploy-relay.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-relay",permalink:"/docs/Guides/deploy-relay",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-relay.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Deploy Protocols on L2",permalink:"/docs/Guides/deploy-l2-protocols"},next:{title:"Deploy Bridge UI",permalink:"/docs/Guides/deploy-bridge-ui"}},u={},d=[{value:"Deployment Steps",id:"deployment-steps",level:2},{value:"1. Clone Repository",id:"1-clone-repository",level:3},{value:"2. Configure Environment",id:"2-configure-environment",level:3},{value:"3. Deploy Components",id:"3-deploy-components",level:3},{value:"Verification",id:"verification",level:2},{value:"Component Health Checks",id:"component-health-checks",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deploy-relayer",children:"Deploy Relayer"})}),"\n",(0,t.jsx)(n.p,{children:"This guide walks you through the process of deploying and configuring the Surge Relayer."}),"\n",(0,t.jsx)(n.h2,{id:"deployment-steps",children:"Deployment Steps"}),"\n",(0,t.jsx)(n.h3,{id:"1-clone-repository",children:"1. Clone Repository"}),"\n",(0,t.jsx)(n.p,{children:"First, clone the Surge Taiko Mono repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/surge-taiko-mono.git\n"})}),"\n",(0,t.jsx)(n.h3,{id:"2-configure-environment",children:"2. Configure Environment"}),"\n",(0,t.jsx)(n.p,{children:"Navigate to the relayer package and prepare the configuration:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd surge-taiko-mono/packages/relayer\ncp .default.env .env\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Edit ",(0,t.jsx)(n.code,{children:".env"}),", make sure ",(0,t.jsx)(n.code,{children:"L1_RPC_URL"})," and ",(0,t.jsx)(n.code,{children:"L2_RPC_URL"})," are set correctly."]}),"\n",(0,t.jsx)(n.h3,{id:"3-deploy-components",children:"3. Deploy Components"}),"\n",(0,t.jsx)(n.p,{children:"Deploy the relayer components in the following sequence:"}),"\n",(0,t.jsxs)(o.A,{children:[(0,t.jsxs)(l.A,{value:"init",label:"Initialize Components",default:!0,children:[(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile init up -d\n"})}),(0,t.jsx)(n.p,{children:"This command starts the relayer database and queue services."})]}),(0,t.jsxs)(l.A,{value:"migrations",label:"Run Migrations",children:[(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Wait for services to be ready\nsleep 20\n\n# Run migrations\ndocker compose --profile migrations up\n"})}),(0,t.jsx)(n.p,{children:"This step sets up the necessary database schema and initial configurations."})]}),(0,t.jsxs)(l.A,{value:"relayer",label:"Start Relayer",children:[(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile l1 --profile l2 --profile api up -d\n"})}),(0,t.jsx)(n.p,{children:"This starts the main relayer service."})]})]}),"\n",(0,t.jsx)(n.h2,{id:"verification",children:"Verification"}),"\n",(0,t.jsx)(n.p,{children:"After deployment, verify that:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Database is properly initialized"}),"\n",(0,t.jsx)(n.li,{children:"Migrations completed successfully"}),"\n",(0,t.jsx)(n.li,{children:"Relayer service is running and connected to both L1 and L2"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"component-health-checks",children:"Component Health Checks"}),"\n",(0,t.jsx)(n.p,{children:"Monitor the health of your deployment:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Check running containers\ndocker compose ps\n\n# View logs of required relayer components, e.g. processor\ndocker logs relayer-l1-processor\n\n# Check database status\ndocker compose logs db -f\n"})}),"\n",(0,t.jsx)(n.admonition,{title:"Important",type:"warning",children:(0,t.jsx)(n.p,{children:"Ensure all components are running before proceeding with any network operations. The relayer is a critical component for cross-layer communication."})}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(n.p,{children:"If you encounter issues:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Connection Issues"})}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Verify L1 and L2 RPC endpoints are accessible"}),"\n",(0,t.jsx)(n.li,{children:"Check network connectivity"}),"\n",(0,t.jsx)(n.li,{children:"Ensure all contract addresses are correct"}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Database Issues"})}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Verify PostgreSQL is running"}),"\n",(0,t.jsx)(n.li,{children:"Check migration logs for errors"}),"\n",(0,t.jsx)(n.li,{children:"Ensure database credentials are correct"}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Service Issues"})}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Check container logs for errors"}),"\n",(0,t.jsx)(n.li,{children:"Verify all environment variables are set"}),"\n",(0,t.jsx)(n.li,{children:"Ensure sufficient system resources"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{title:"Need Help?",type:"tip",children:[(0,t.jsx)(n.p,{children:"If you continue to experience issues, check the logs using:"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose logs --tail=100\n"})})]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},9365:(e,n,r)=>{r.d(n,{A:()=>l});r(6540);var t=r(4164);const s={tabItem:"tabItem_Ymn6"};var o=r(4848);function l(e){let{children:n,hidden:r,className:l}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,t.A)(s.tabItem,l),hidden:r,children:n})}},1470:(e,n,r)=>{r.d(n,{A:()=>k});var t=r(6540),s=r(4164),o=r(3104),l=r(6347),i=r(205),a=r(7485),c=r(1682),u=r(679);function d(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:s}}=e;return{value:n,label:r,attributes:t,default:s}}))}(r);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:r}=e;const s=(0,l.W6)(),o=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,a.aZ)(o),(0,t.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(s.location.search);n.set(o,e),s.replace({...s.location,search:n.toString()})}),[o,s])]}function f(e){const{defaultValue:n,queryString:r=!1,groupId:s}=e,o=h(e),[l,a]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:o}))),[c,d]=m({queryString:r,groupId:s}),[f,g]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,o]=(0,u.Dv)(r);return[s,(0,t.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:s}),y=(()=>{const e=c??f;return p({value:e,tabValues:o})?e:null})();(0,i.A)((()=>{y&&a(y)}),[y]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),g(e)}),[d,g,o]),tabValues:o}}var g=r(2303);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=r(4848);function x(e){let{className:n,block:r,selectedValue:t,selectValue:l,tabValues:i}=e;const a=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.a_)(),u=e=>{const n=e.currentTarget,r=a.indexOf(n),s=i[r].value;s!==t&&(c(n),l(s))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;n=a[r]??a[0];break}case"ArrowLeft":{const r=a.indexOf(e.currentTarget)-1;n=a[r]??a[a.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":r},n),children:i.map((e=>{let{value:n,label:r,attributes:o}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>a.push(e),onKeyDown:d,onClick:u,...o,className:(0,s.A)("tabs__item",y.tabItem,o?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function j(e){let{lazy:n,children:r,selectedValue:o}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=l.find((e=>e.props.value===o));return e?(0,t.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function v(e){const n=f(e);return(0,b.jsxs)("div",{className:(0,s.A)("tabs-container",y.tabList),children:[(0,b.jsx)(x,{...n,...e}),(0,b.jsx)(j,{...n,...e})]})}function k(e){const n=(0,g.A)();return(0,b.jsx)(v,{...e,children:d(e.children)},String(n))}},8453:(e,n,r)=>{r.d(n,{R:()=>l,x:()=>i});var t=r(6540);const s={},o=t.createContext(s);function l(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[220],{6311:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>u,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var t=r(4848),s=r(8453),o=r(1470),l=r(9365);const i={sidebar_position:5},a="Deploy Relayer",c={id:"Guides/deploy-relay",title:"Deploy Relayer",description:"This guide walks you through the process of deploying and configuring the Surge Relayer.",source:"@site/docs/Guides/deploy-relay.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-relay",permalink:"/docs/Guides/deploy-relay",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-relay.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Deploy Protocols on L2",permalink:"/docs/Guides/deploy-l2-protocols"},next:{title:"Deploy Bridge UI",permalink:"/docs/Guides/deploy-bridge-ui"}},u={},d=[{value:"Deployment Steps",id:"deployment-steps",level:2},{value:"1. Clone Repository",id:"1-clone-repository",level:3},{value:"2. Configure Environment",id:"2-configure-environment",level:3},{value:"3. Deploy Components",id:"3-deploy-components",level:3},{value:"Verification",id:"verification",level:2},{value:"Component Health Checks",id:"component-health-checks",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deploy-relayer",children:"Deploy Relayer"})}),"\n",(0,t.jsx)(n.p,{children:"This guide walks you through the process of deploying and configuring the Surge Relayer."}),"\n",(0,t.jsx)(n.h2,{id:"deployment-steps",children:"Deployment Steps"}),"\n",(0,t.jsx)(n.h3,{id:"1-clone-repository",children:"1. Clone Repository"}),"\n",(0,t.jsx)(n.p,{children:"First, clone the Surge Taiko Mono repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/surge-taiko-mono.git\n"})}),"\n",(0,t.jsx)(n.h3,{id:"2-configure-environment",children:"2. Configure Environment"}),"\n",(0,t.jsx)(n.p,{children:"Navigate to the relayer package and prepare the configuration:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd surge-taiko-mono/packages/relayer\ncp .default.env .env\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Edit ",(0,t.jsx)(n.code,{children:".env"}),", make sure ",(0,t.jsx)(n.code,{children:"L1_RPC_URL"})," and ",(0,t.jsx)(n.code,{children:"L2_RPC_URL"})," are set correctly."]}),"\n",(0,t.jsx)(n.h3,{id:"3-deploy-components",children:"3. Deploy Components"}),"\n",(0,t.jsx)(n.p,{children:"Deploy the relayer components in the following sequence:"}),"\n",(0,t.jsxs)(o.A,{children:[(0,t.jsxs)(l.A,{value:"init",label:"Initialize Components",default:!0,children:[(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile init up -d\n"})}),(0,t.jsx)(n.p,{children:"This command starts the relayer database and queue services."})]}),(0,t.jsxs)(l.A,{value:"migrations",label:"Run Migrations",children:[(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Wait for services to be ready\nsleep 20\n\n# Run migrations\ndocker compose --profile migrations up\n"})}),(0,t.jsx)(n.p,{children:"This step sets up the necessary database schema and initial configurations."})]}),(0,t.jsxs)(l.A,{value:"relayer",label:"Start Relayer",children:[(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile l1 --profile l2 --profile api up -d\n"})}),(0,t.jsx)(n.p,{children:"This starts the main relayer service."})]})]}),"\n",(0,t.jsx)(n.h2,{id:"verification",children:"Verification"}),"\n",(0,t.jsx)(n.p,{children:"After deployment, verify that:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Database is properly initialized"}),"\n",(0,t.jsx)(n.li,{children:"Migrations completed successfully"}),"\n",(0,t.jsx)(n.li,{children:"Relayer service is running and connected to both L1 and L2"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"component-health-checks",children:"Component Health Checks"}),"\n",(0,t.jsx)(n.p,{children:"Monitor the health of your deployment:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Check running containers\ndocker compose ps\n\n# View logs of required relayer components, e.g. processor\ndocker logs relayer-l1-processor\n\n# Check database status\ndocker compose logs db -f\n"})}),"\n",(0,t.jsx)(n.admonition,{title:"Important",type:"warning",children:(0,t.jsx)(n.p,{children:"Ensure all components are running before proceeding with any network operations. The relayer is a critical component for cross-layer communication."})}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(n.p,{children:"If you encounter issues:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Connection Issues"})}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Verify L1 and L2 RPC endpoints are accessible"}),"\n",(0,t.jsx)(n.li,{children:"Check network connectivity"}),"\n",(0,t.jsx)(n.li,{children:"Ensure all contract addresses are correct"}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Database Issues"})}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Verify PostgreSQL is running"}),"\n",(0,t.jsx)(n.li,{children:"Check migration logs for errors"}),"\n",(0,t.jsx)(n.li,{children:"Ensure database credentials are correct"}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Service Issues"})}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Check container logs for errors"}),"\n",(0,t.jsx)(n.li,{children:"Verify all environment variables are set"}),"\n",(0,t.jsx)(n.li,{children:"Ensure sufficient system resources"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{title:"Need Help?",type:"tip",children:[(0,t.jsx)(n.p,{children:"If you continue to experience issues, check the logs using:"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose logs --tail=100\n"})})]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},9365:(e,n,r)=>{r.d(n,{A:()=>l});r(6540);var t=r(4164);const s={tabItem:"tabItem_Ymn6"};var o=r(4848);function l(e){let{children:n,hidden:r,className:l}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,t.A)(s.tabItem,l),hidden:r,children:n})}},1470:(e,n,r)=>{r.d(n,{A:()=>k});var t=r(6540),s=r(4164),o=r(3104),l=r(6347),i=r(205),a=r(7485),c=r(1682),u=r(679);function d(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:s}}=e;return{value:n,label:r,attributes:t,default:s}}))}(r);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:r}=e;const s=(0,l.W6)(),o=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,a.aZ)(o),(0,t.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(s.location.search);n.set(o,e),s.replace({...s.location,search:n.toString()})}),[o,s])]}function f(e){const{defaultValue:n,queryString:r=!1,groupId:s}=e,o=h(e),[l,a]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:o}))),[c,d]=m({queryString:r,groupId:s}),[f,g]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,o]=(0,u.Dv)(r);return[s,(0,t.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:s}),y=(()=>{const e=c??f;return p({value:e,tabValues:o})?e:null})();(0,i.A)((()=>{y&&a(y)}),[y]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),g(e)}),[d,g,o]),tabValues:o}}var g=r(2303);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=r(4848);function x(e){let{className:n,block:r,selectedValue:t,selectValue:l,tabValues:i}=e;const a=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.a_)(),u=e=>{const n=e.currentTarget,r=a.indexOf(n),s=i[r].value;s!==t&&(c(n),l(s))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;n=a[r]??a[0];break}case"ArrowLeft":{const r=a.indexOf(e.currentTarget)-1;n=a[r]??a[a.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":r},n),children:i.map((e=>{let{value:n,label:r,attributes:o}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>a.push(e),onKeyDown:d,onClick:u,...o,className:(0,s.A)("tabs__item",y.tabItem,o?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function j(e){let{lazy:n,children:r,selectedValue:o}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=l.find((e=>e.props.value===o));return e?(0,t.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function v(e){const n=f(e);return(0,b.jsxs)("div",{className:(0,s.A)("tabs-container",y.tabList),children:[(0,b.jsx)(x,{...n,...e}),(0,b.jsx)(j,{...n,...e})]})}function k(e){const n=(0,g.A)();return(0,b.jsx)(v,{...e,children:d(e.children)},String(n))}},8453:(e,n,r)=>{r.d(n,{R:()=>l,x:()=>i});var t=r(6540);const s={},o=t.createContext(s);function l(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/70229f88.190c55b4.js b/assets/js/70229f88.0fea5e0d.js similarity index 97% rename from assets/js/70229f88.190c55b4.js rename to assets/js/70229f88.0fea5e0d.js index 538e6db..bd69857 100644 --- a/assets/js/70229f88.190c55b4.js +++ b/assets/js/70229f88.0fea5e0d.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[899],{9131:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>n,metadata:()=>d,toc:()=>p});var o=s(4848),t=s(8453);const n={sidebar_position:2},i="Set up a Prover",d={id:"Guides/provers/index",title:"Set up a Prover",description:"Complete guide for setting up a Surge prover:",source:"@site/docs/Guides/provers/index.mdx",sourceDirName:"Guides/provers",slug:"/Guides/provers/",permalink:"/docs/Guides/provers/",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/provers/index.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Deploy Protocols on L1",permalink:"/docs/Guides/deploy-l1-protocols"},next:{title:"Deploy SGX Prover",permalink:"/docs/Guides/provers/sgx-prover"}},c={},p=[];function u(e){const r={a:"a",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.header,{children:(0,o.jsx)(r.h1,{id:"set-up-a-prover",children:"Set up a Prover"})}),"\n",(0,o.jsx)(r.p,{children:"Complete guide for setting up a Surge prover:"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/Guides/provers/sgx-prover",children:"SGX"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/Guides/provers/risc0-prover",children:"RISC0"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/Guides/provers/sp1-prover",children:"SP1"})}),"\n"]})]})}function l(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,r,s)=>{s.d(r,{R:()=>i,x:()=>d});var o=s(6540);const t={},n=o.createContext(t);function i(e){const r=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),o.createElement(n.Provider,{value:r},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[899],{9131:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>n,metadata:()=>d,toc:()=>p});var o=s(4848),t=s(8453);const n={sidebar_position:2},i="Set up a Prover",d={id:"Guides/provers/index",title:"Set up a Prover",description:"Complete guide for setting up a Surge prover:",source:"@site/docs/Guides/provers/index.mdx",sourceDirName:"Guides/provers",slug:"/Guides/provers/",permalink:"/docs/Guides/provers/",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/provers/index.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Deploy Protocols on L1",permalink:"/docs/Guides/deploy-l1-protocols"},next:{title:"Deploy SGX Prover",permalink:"/docs/Guides/provers/sgx-prover"}},c={},p=[];function u(e){const r={a:"a",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.header,{children:(0,o.jsx)(r.h1,{id:"set-up-a-prover",children:"Set up a Prover"})}),"\n",(0,o.jsx)(r.p,{children:"Complete guide for setting up a Surge prover:"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/Guides/provers/sgx-prover",children:"SGX"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/Guides/provers/risc0-prover",children:"RISC0"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/Guides/provers/sp1-prover",children:"SP1"})}),"\n"]})]})}function l(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,r,s)=>{s.d(r,{R:()=>i,x:()=>d});var o=s(6540);const t={},n=o.createContext(t);function i(e){const r=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),o.createElement(n.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7bab19c9.aea566bc.js b/assets/js/7bab19c9.f6fcf2af.js similarity index 99% rename from assets/js/7bab19c9.aea566bc.js rename to assets/js/7bab19c9.f6fcf2af.js index 2e8fe79..928d8b5 100644 --- a/assets/js/7bab19c9.aea566bc.js +++ b/assets/js/7bab19c9.f6fcf2af.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[599],{3693:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>u});var r=i(4848),s=i(8453),l=i(1470),t=i(9365);const o={sidebar_position:7},c="Deploy Bridge UI",a={id:"Guides/deploy-bridge-ui",title:"Deploy Bridge UI",description:"This guide walks you through deploying the Surge Bridge UI, including all necessary configurations and services.",source:"@site/docs/Guides/deploy-bridge-ui.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-bridge-ui",permalink:"/docs/Guides/deploy-bridge-ui",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-bridge-ui.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"Deploy Relayer",permalink:"/docs/Guides/deploy-relay"},next:{title:"Troubleshooting",permalink:"/docs/Troubleshooting/"}},d={},u=[{value:"1. Clone Repository",id:"1-clone-repository",level:2},{value:"2. SSL Certificate Setup",id:"2-ssl-certificate-setup",level:2},{value:"3. Configure Nginx Reverse Proxy",id:"3-configure-nginx-reverse-proxy",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"4. Configure Components",id:"4-configure-components",level:2},{value:"Configuration Files Setup",id:"configuration-files-setup",level:3},{value:"Prerequisites",id:"prerequisites-1",level:4},{value:"Prerequisites",id:"prerequisites-2",level:4},{value:"Prerequisites",id:"prerequisites-3",level:4},{value:"5. Deploy Services",id:"5-deploy-services",level:2},{value:"Verification Steps",id:"verification-steps",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"deploy-bridge-ui",children:"Deploy Bridge UI"})}),"\n",(0,r.jsx)(n.p,{children:"This guide walks you through deploying the Surge Bridge UI, including all necessary configurations and services."}),"\n",(0,r.jsx)(n.h2,{id:"1-clone-repository",children:"1. Clone Repository"}),"\n",(0,r.jsx)(n.p,{children:"First, clone the Surge Taiko Mono repository:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/surge-taiko-mono.git\ncd surge-taiko-mono/packages/bridge-ui\n"})}),"\n",(0,r.jsx)(n.h2,{id:"2-ssl-certificate-setup",children:"2. SSL Certificate Setup"}),"\n",(0,r.jsx)(n.p,{children:"Generate SSL certificates for nginx:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cd ./nginx\nchmod +x ./generate-certs.sh\n./generate-certs.sh\n"})}),"\n",(0,r.jsx)(n.h2,{id:"3-configure-nginx-reverse-proxy",children:"3. Configure Nginx Reverse Proxy"}),"\n",(0,r.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"L1 RPC URL"}),"\n",(0,r.jsx)(n.li,{children:"L1 Blockscout URL"}),"\n",(0,r.jsx)(n.li,{children:"L1 to L2 Relayer URL"}),"\n",(0,r.jsx)(n.li,{children:"L2 RPC URL"}),"\n",(0,r.jsx)(n.li,{children:"L2 Blockscout URL"}),"\n",(0,r.jsx)(n.li,{children:"L2 to L1 Relayer URL"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Update the nginx configuration file ",(0,r.jsx)(n.code,{children:"./nginx/nginx.conf"})," with your specific URLs and endpoints."]}),"\n",(0,r.jsx)(n.p,{children:"Example configuration part:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-nginx",children:"# L1 RPC endpoint\nlocation /l1-rpc/ {\n proxy_pass http://placeholder:32002/;\n proxy_http_version 1.1;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n}\n\n"})}),"\n",(0,r.jsx)(n.h2,{id:"4-configure-components",children:"4. Configure Components"}),"\n",(0,r.jsx)(n.h3,{id:"configuration-files-setup",children:"Configuration Files Setup"}),"\n",(0,r.jsx)(n.p,{children:"You'll need to configure several JSON files before deployment. Each has specific requirements:"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"The ULRs specified in the configuration files must use HTTPS."})}),"\n",(0,r.jsxs)(l.A,{children:[(0,r.jsxs)(t.A,{value:"bridges",label:"Bridges",default:!0,children:[(0,r.jsx)(n.h4,{id:"prerequisites-1",children:"Prerequisites"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"L1 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L1 Contract Addresses:"}),"\n",(0,r.jsx)(n.li,{children:"L1_BRIDGE"}),"\n",(0,r.jsx)(n.li,{children:"L1_ERC20_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L1_ERC721_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L1_ERC1155_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L1_SIGNAL_SERVICE"}),"\n",(0,r.jsx)(n.li,{children:"L2 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L2 Contract Addresses:"}),"\n",(0,r.jsx)(n.li,{children:"L2_BRIDGE"}),"\n",(0,r.jsx)(n.li,{children:"L2_ERC20_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L2_ERC721_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L2_ERC1155_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L2_SIGNAL_SERVICE"}),"\n"]}),(0,r.jsxs)(n.p,{children:["Path: ",(0,r.jsx)(n.code,{children:"./config/configuredBridges.json"})]}),(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"The file contains default addresses used in the tutorial. Replace if necessary."})})]}),(0,r.jsxs)(t.A,{value:"chains",label:"Chains",children:[(0,r.jsx)(n.h4,{id:"prerequisites-2",children:"Prerequisites"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"L1 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L1 RPC URL"}),"\n",(0,r.jsx)(n.li,{children:"L2 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L2 RPC URL"}),"\n"]}),(0,r.jsxs)(n.p,{children:["Path: ",(0,r.jsx)(n.code,{children:"./config/configuredChains.json"})]}),(0,r.jsxs)(n.p,{children:["Modify ",(0,r.jsx)(n.code,{children:"rpcUrls"})," fields to point to the alias specified in the nginx configuration."]}),(0,r.jsx)(n.p,{children:"Example configuration parts:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"3151908": {\n "name": "Kurtosis",\n "type": "L1",\n "icon": "https://cdn.worldvectorlogo.com/logos/ethereum-eth.svg",\n "rpcUrls": {\n "default": {\n "http": [\n "https://placeholder/l1-rpc/"\n ]\n }\n },\n\n ...\n}\n'})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"763374": {\n "name": "Taiko",\n "type": "L2",\n "icon": "https://cdn.worldvectorlogo.com/logos/ethereum-eth.svg",\n "rpcUrls": {\n "default": {\n "http": [\n "https://placeholder/l2-rpc/"\n ]\n }\n },\n\n ...\n}\n'})})]}),(0,r.jsxs)(t.A,{value:"relayer",label:"Relayer",children:[(0,r.jsx)(n.h4,{id:"prerequisites-3",children:"Prerequisites"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"L1 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L1 to L2 Relayer URL"}),"\n",(0,r.jsx)(n.li,{children:"L2 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L2 to L1 Relayer URL"}),"\n"]}),(0,r.jsxs)(n.p,{children:["Path: ",(0,r.jsx)(n.code,{children:"./config/configuredRelayer.json"})]}),(0,r.jsx)(n.p,{children:"Example configuration:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "configuredRelayer": [\n {\n "chainIds": [3151908, 763374],\n "url": "https://placeholder/l1-relayer/"\n },\n {\n "chainIds": [763374, 3151908],\n "url": "https://placeholder/l2-relayer/"\n }\n ]\n}\n\n'})})]}),(0,r.jsxs)(t.A,{value:"other",label:"Additional Configs",children:[(0,r.jsx)(n.p,{children:"These files also need to be configured:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"./config/configuredCustomTokens.json"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"./config/configuredEventIndexer.json"})}),"\n"]}),(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"These files may require minimal or no modification depending on your deployment needs."})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"5-deploy-services",children:"5. Deploy Services"}),"\n",(0,r.jsx)(n.p,{children:"Deploy the Bridge UI and nginx services:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# Start Bridge UI\ndocker compose --profile bridge-ui up -d --build\n\n# Start Nginx\ndocker compose --profile nginx up -d\n"})}),"\n",(0,r.jsx)(n.h2,{id:"verification-steps",children:"Verification Steps"}),"\n",(0,r.jsx)(n.p,{children:"After deployment, verify:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Bridge UI Accessibility"}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Check if the UI is accessible via the configured domain"}),"\n",(0,r.jsx)(n.li,{children:"Verify SSL certificate is working properly"}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsx)(n.li,{children:"Component Connectivity"}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Verify connection to L1 and L2 networks"}),"\n",(0,r.jsx)(n.li,{children:"Check relayer connectivity"}),"\n",(0,r.jsx)(n.li,{children:"Confirm Blockscout integration"}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsx)(n.li,{children:"Service Health"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# Check running containers\ndocker compose ps\n\n# View Bridge UI logs\ndocker compose logs bridge-ui -f\n\n# View Nginx logs\ndocker compose logs nginx -f\n"})}),"\n",(0,r.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,r.jsx)(n.p,{children:"If you encounter issues:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"UI Access Issues"})}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Check nginx configuration"}),"\n",(0,r.jsx)(n.li,{children:"Verify SSL certificate setup"}),"\n",(0,r.jsx)(n.li,{children:"Confirm port mappings"}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Network Connectivity"})}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Verify RPC endpoints"}),"\n",(0,r.jsx)(n.li,{children:"Check relayer connections"}),"\n",(0,r.jsx)(n.li,{children:"Confirm blockchain network access"}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Configuration Problems"})}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Validate JSON syntax in config files"}),"\n",(0,r.jsx)(n.li,{children:"Verify contract addresses"}),"\n",(0,r.jsx)(n.li,{children:"Check chain IDs match your network"}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Make sure all URLs in the nginx configuration are accessible and properly secured before deployment."})})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},9365:(e,n,i)=>{i.d(n,{A:()=>t});i(6540);var r=i(4164);const s={tabItem:"tabItem_Ymn6"};var l=i(4848);function t(e){let{children:n,hidden:i,className:t}=e;return(0,l.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,t),hidden:i,children:n})}},1470:(e,n,i)=>{i.d(n,{A:()=>L});var r=i(6540),s=i(4164),l=i(3104),t=i(6347),o=i(205),c=i(7485),a=i(1682),d=i(679);function u(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:i}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:i,attributes:r,default:s}}=e;return{value:n,label:i,attributes:r,default:s}}))}(i);return function(e){const n=(0,a.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,i])}function p(e){let{value:n,tabValues:i}=e;return i.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:i}=e;const s=(0,t.W6)(),l=function(e){let{queryString:n=!1,groupId:i}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!i)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:n,groupId:i});return[(0,c.aZ)(l),(0,r.useCallback)((e=>{if(!l)return;const n=new URLSearchParams(s.location.search);n.set(l,e),s.replace({...s.location,search:n.toString()})}),[l,s])]}function g(e){const{defaultValue:n,queryString:i=!1,groupId:s}=e,l=h(e),[t,c]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:i}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=i.find((e=>e.default))??i[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:l}))),[a,u]=x({queryString:i,groupId:s}),[g,f]=function(e){let{groupId:n}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,l]=(0,d.Dv)(i);return[s,(0,r.useCallback)((e=>{i&&l.set(e)}),[i,l])]}({groupId:s}),j=(()=>{const e=a??g;return p({value:e,tabValues:l})?e:null})();(0,o.A)((()=>{j&&c(j)}),[j]);return{selectedValue:t,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);c(e),u(e),f(e)}),[u,f,l]),tabValues:l}}var f=i(2303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=i(4848);function y(e){let{className:n,block:i,selectedValue:r,selectValue:t,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:a}=(0,l.a_)(),d=e=>{const n=e.currentTarget,i=c.indexOf(n),s=o[i].value;s!==r&&(a(n),t(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const i=c.indexOf(e.currentTarget)+1;n=c[i]??c[0];break}case"ArrowLeft":{const i=c.indexOf(e.currentTarget)-1;n=c[i]??c[c.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":i},n),children:o.map((e=>{let{value:n,label:i,attributes:l}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>c.push(e),onKeyDown:u,onClick:d,...l,className:(0,s.A)("tabs__item",j.tabItem,l?.className,{"tabs__item--active":r===n}),children:i??n},n)}))})}function b(e){let{lazy:n,children:i,selectedValue:l}=e;const t=(Array.isArray(i)?i:[i]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===l));return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==l})))})}function v(e){const n=g(e);return(0,m.jsxs)("div",{className:(0,s.A)("tabs-container",j.tabList),children:[(0,m.jsx)(y,{...n,...e}),(0,m.jsx)(b,{...n,...e})]})}function L(e){const n=(0,f.A)();return(0,m.jsx)(v,{...e,children:u(e.children)},String(n))}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>o});var r=i(6540);const s={},l=r.createContext(s);function t(e){const n=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),r.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[599],{3693:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>u});var r=i(4848),s=i(8453),l=i(1470),t=i(9365);const o={sidebar_position:7},c="Deploy Bridge UI",a={id:"Guides/deploy-bridge-ui",title:"Deploy Bridge UI",description:"This guide walks you through deploying the Surge Bridge UI, including all necessary configurations and services.",source:"@site/docs/Guides/deploy-bridge-ui.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-bridge-ui",permalink:"/docs/Guides/deploy-bridge-ui",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-bridge-ui.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"Deploy Relayer",permalink:"/docs/Guides/deploy-relay"},next:{title:"Troubleshooting",permalink:"/docs/Troubleshooting/"}},d={},u=[{value:"1. Clone Repository",id:"1-clone-repository",level:2},{value:"2. SSL Certificate Setup",id:"2-ssl-certificate-setup",level:2},{value:"3. Configure Nginx Reverse Proxy",id:"3-configure-nginx-reverse-proxy",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"4. Configure Components",id:"4-configure-components",level:2},{value:"Configuration Files Setup",id:"configuration-files-setup",level:3},{value:"Prerequisites",id:"prerequisites-1",level:4},{value:"Prerequisites",id:"prerequisites-2",level:4},{value:"Prerequisites",id:"prerequisites-3",level:4},{value:"5. Deploy Services",id:"5-deploy-services",level:2},{value:"Verification Steps",id:"verification-steps",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"deploy-bridge-ui",children:"Deploy Bridge UI"})}),"\n",(0,r.jsx)(n.p,{children:"This guide walks you through deploying the Surge Bridge UI, including all necessary configurations and services."}),"\n",(0,r.jsx)(n.h2,{id:"1-clone-repository",children:"1. Clone Repository"}),"\n",(0,r.jsx)(n.p,{children:"First, clone the Surge Taiko Mono repository:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/surge-taiko-mono.git\ncd surge-taiko-mono/packages/bridge-ui\n"})}),"\n",(0,r.jsx)(n.h2,{id:"2-ssl-certificate-setup",children:"2. SSL Certificate Setup"}),"\n",(0,r.jsx)(n.p,{children:"Generate SSL certificates for nginx:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cd ./nginx\nchmod +x ./generate-certs.sh\n./generate-certs.sh\n"})}),"\n",(0,r.jsx)(n.h2,{id:"3-configure-nginx-reverse-proxy",children:"3. Configure Nginx Reverse Proxy"}),"\n",(0,r.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"L1 RPC URL"}),"\n",(0,r.jsx)(n.li,{children:"L1 Blockscout URL"}),"\n",(0,r.jsx)(n.li,{children:"L1 to L2 Relayer URL"}),"\n",(0,r.jsx)(n.li,{children:"L2 RPC URL"}),"\n",(0,r.jsx)(n.li,{children:"L2 Blockscout URL"}),"\n",(0,r.jsx)(n.li,{children:"L2 to L1 Relayer URL"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Update the nginx configuration file ",(0,r.jsx)(n.code,{children:"./nginx/nginx.conf"})," with your specific URLs and endpoints."]}),"\n",(0,r.jsx)(n.p,{children:"Example configuration part:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-nginx",children:"# L1 RPC endpoint\nlocation /l1-rpc/ {\n proxy_pass http://placeholder:32002/;\n proxy_http_version 1.1;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n}\n\n"})}),"\n",(0,r.jsx)(n.h2,{id:"4-configure-components",children:"4. Configure Components"}),"\n",(0,r.jsx)(n.h3,{id:"configuration-files-setup",children:"Configuration Files Setup"}),"\n",(0,r.jsx)(n.p,{children:"You'll need to configure several JSON files before deployment. Each has specific requirements:"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"The ULRs specified in the configuration files must use HTTPS."})}),"\n",(0,r.jsxs)(l.A,{children:[(0,r.jsxs)(t.A,{value:"bridges",label:"Bridges",default:!0,children:[(0,r.jsx)(n.h4,{id:"prerequisites-1",children:"Prerequisites"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"L1 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L1 Contract Addresses:"}),"\n",(0,r.jsx)(n.li,{children:"L1_BRIDGE"}),"\n",(0,r.jsx)(n.li,{children:"L1_ERC20_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L1_ERC721_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L1_ERC1155_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L1_SIGNAL_SERVICE"}),"\n",(0,r.jsx)(n.li,{children:"L2 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L2 Contract Addresses:"}),"\n",(0,r.jsx)(n.li,{children:"L2_BRIDGE"}),"\n",(0,r.jsx)(n.li,{children:"L2_ERC20_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L2_ERC721_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L2_ERC1155_VAULT"}),"\n",(0,r.jsx)(n.li,{children:"L2_SIGNAL_SERVICE"}),"\n"]}),(0,r.jsxs)(n.p,{children:["Path: ",(0,r.jsx)(n.code,{children:"./config/configuredBridges.json"})]}),(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"The file contains default addresses used in the tutorial. Replace if necessary."})})]}),(0,r.jsxs)(t.A,{value:"chains",label:"Chains",children:[(0,r.jsx)(n.h4,{id:"prerequisites-2",children:"Prerequisites"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"L1 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L1 RPC URL"}),"\n",(0,r.jsx)(n.li,{children:"L2 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L2 RPC URL"}),"\n"]}),(0,r.jsxs)(n.p,{children:["Path: ",(0,r.jsx)(n.code,{children:"./config/configuredChains.json"})]}),(0,r.jsxs)(n.p,{children:["Modify ",(0,r.jsx)(n.code,{children:"rpcUrls"})," fields to point to the alias specified in the nginx configuration."]}),(0,r.jsx)(n.p,{children:"Example configuration parts:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"3151908": {\n "name": "Kurtosis",\n "type": "L1",\n "icon": "https://cdn.worldvectorlogo.com/logos/ethereum-eth.svg",\n "rpcUrls": {\n "default": {\n "http": [\n "https://placeholder/l1-rpc/"\n ]\n }\n },\n\n ...\n}\n'})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"763374": {\n "name": "Taiko",\n "type": "L2",\n "icon": "https://cdn.worldvectorlogo.com/logos/ethereum-eth.svg",\n "rpcUrls": {\n "default": {\n "http": [\n "https://placeholder/l2-rpc/"\n ]\n }\n },\n\n ...\n}\n'})})]}),(0,r.jsxs)(t.A,{value:"relayer",label:"Relayer",children:[(0,r.jsx)(n.h4,{id:"prerequisites-3",children:"Prerequisites"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"L1 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L1 to L2 Relayer URL"}),"\n",(0,r.jsx)(n.li,{children:"L2 Chain ID"}),"\n",(0,r.jsx)(n.li,{children:"L2 to L1 Relayer URL"}),"\n"]}),(0,r.jsxs)(n.p,{children:["Path: ",(0,r.jsx)(n.code,{children:"./config/configuredRelayer.json"})]}),(0,r.jsx)(n.p,{children:"Example configuration:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "configuredRelayer": [\n {\n "chainIds": [3151908, 763374],\n "url": "https://placeholder/l1-relayer/"\n },\n {\n "chainIds": [763374, 3151908],\n "url": "https://placeholder/l2-relayer/"\n }\n ]\n}\n\n'})})]}),(0,r.jsxs)(t.A,{value:"other",label:"Additional Configs",children:[(0,r.jsx)(n.p,{children:"These files also need to be configured:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"./config/configuredCustomTokens.json"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"./config/configuredEventIndexer.json"})}),"\n"]}),(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"These files may require minimal or no modification depending on your deployment needs."})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"5-deploy-services",children:"5. Deploy Services"}),"\n",(0,r.jsx)(n.p,{children:"Deploy the Bridge UI and nginx services:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# Start Bridge UI\ndocker compose --profile bridge-ui up -d --build\n\n# Start Nginx\ndocker compose --profile nginx up -d\n"})}),"\n",(0,r.jsx)(n.h2,{id:"verification-steps",children:"Verification Steps"}),"\n",(0,r.jsx)(n.p,{children:"After deployment, verify:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Bridge UI Accessibility"}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Check if the UI is accessible via the configured domain"}),"\n",(0,r.jsx)(n.li,{children:"Verify SSL certificate is working properly"}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsx)(n.li,{children:"Component Connectivity"}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Verify connection to L1 and L2 networks"}),"\n",(0,r.jsx)(n.li,{children:"Check relayer connectivity"}),"\n",(0,r.jsx)(n.li,{children:"Confirm Blockscout integration"}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsx)(n.li,{children:"Service Health"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# Check running containers\ndocker compose ps\n\n# View Bridge UI logs\ndocker compose logs bridge-ui -f\n\n# View Nginx logs\ndocker compose logs nginx -f\n"})}),"\n",(0,r.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,r.jsx)(n.p,{children:"If you encounter issues:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"UI Access Issues"})}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Check nginx configuration"}),"\n",(0,r.jsx)(n.li,{children:"Verify SSL certificate setup"}),"\n",(0,r.jsx)(n.li,{children:"Confirm port mappings"}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Network Connectivity"})}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Verify RPC endpoints"}),"\n",(0,r.jsx)(n.li,{children:"Check relayer connections"}),"\n",(0,r.jsx)(n.li,{children:"Confirm blockchain network access"}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Configuration Problems"})}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Validate JSON syntax in config files"}),"\n",(0,r.jsx)(n.li,{children:"Verify contract addresses"}),"\n",(0,r.jsx)(n.li,{children:"Check chain IDs match your network"}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Make sure all URLs in the nginx configuration are accessible and properly secured before deployment."})})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},9365:(e,n,i)=>{i.d(n,{A:()=>t});i(6540);var r=i(4164);const s={tabItem:"tabItem_Ymn6"};var l=i(4848);function t(e){let{children:n,hidden:i,className:t}=e;return(0,l.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,t),hidden:i,children:n})}},1470:(e,n,i)=>{i.d(n,{A:()=>L});var r=i(6540),s=i(4164),l=i(3104),t=i(6347),o=i(205),c=i(7485),a=i(1682),d=i(679);function u(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:i}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:i,attributes:r,default:s}}=e;return{value:n,label:i,attributes:r,default:s}}))}(i);return function(e){const n=(0,a.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,i])}function p(e){let{value:n,tabValues:i}=e;return i.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:i}=e;const s=(0,t.W6)(),l=function(e){let{queryString:n=!1,groupId:i}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!i)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:n,groupId:i});return[(0,c.aZ)(l),(0,r.useCallback)((e=>{if(!l)return;const n=new URLSearchParams(s.location.search);n.set(l,e),s.replace({...s.location,search:n.toString()})}),[l,s])]}function g(e){const{defaultValue:n,queryString:i=!1,groupId:s}=e,l=h(e),[t,c]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:i}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=i.find((e=>e.default))??i[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:l}))),[a,u]=x({queryString:i,groupId:s}),[g,f]=function(e){let{groupId:n}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,l]=(0,d.Dv)(i);return[s,(0,r.useCallback)((e=>{i&&l.set(e)}),[i,l])]}({groupId:s}),j=(()=>{const e=a??g;return p({value:e,tabValues:l})?e:null})();(0,o.A)((()=>{j&&c(j)}),[j]);return{selectedValue:t,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);c(e),u(e),f(e)}),[u,f,l]),tabValues:l}}var f=i(2303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=i(4848);function y(e){let{className:n,block:i,selectedValue:r,selectValue:t,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:a}=(0,l.a_)(),d=e=>{const n=e.currentTarget,i=c.indexOf(n),s=o[i].value;s!==r&&(a(n),t(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const i=c.indexOf(e.currentTarget)+1;n=c[i]??c[0];break}case"ArrowLeft":{const i=c.indexOf(e.currentTarget)-1;n=c[i]??c[c.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":i},n),children:o.map((e=>{let{value:n,label:i,attributes:l}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>c.push(e),onKeyDown:u,onClick:d,...l,className:(0,s.A)("tabs__item",j.tabItem,l?.className,{"tabs__item--active":r===n}),children:i??n},n)}))})}function b(e){let{lazy:n,children:i,selectedValue:l}=e;const t=(Array.isArray(i)?i:[i]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===l));return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==l})))})}function v(e){const n=g(e);return(0,m.jsxs)("div",{className:(0,s.A)("tabs-container",j.tabList),children:[(0,m.jsx)(y,{...n,...e}),(0,m.jsx)(b,{...n,...e})]})}function L(e){const n=(0,f.A)();return(0,m.jsx)(v,{...e,children:u(e.children)},String(n))}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>o});var r=i(6540);const s={},l=r.createContext(s);function t(e){const n=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),r.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/995c0dc6.7c2c854c.js b/assets/js/995c0dc6.f9c950a9.js similarity index 99% rename from assets/js/995c0dc6.7c2c854c.js rename to assets/js/995c0dc6.f9c950a9.js index 45c2776..c2ad852 100644 --- a/assets/js/995c0dc6.7c2c854c.js +++ b/assets/js/995c0dc6.f9c950a9.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[502],{2487:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>t});var l=s(4848),i=s(8453);const r={sidebar_position:2},a="Deploy RISC0 Prover",c={id:"Guides/provers/risc0-prover",title:"Deploy RISC0 Prover",description:"Prerequisites",source:"@site/docs/Guides/provers/risc0-prover.mdx",sourceDirName:"Guides/provers",slug:"/Guides/provers/risc0-prover",permalink:"/docs/Guides/provers/risc0-prover",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/provers/risc0-prover.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Deploy SGX Prover",permalink:"/docs/Guides/provers/sgx-prover"},next:{title:"Deploy SP1 Prover",permalink:"/docs/Guides/provers/sp1-prover"}},o={},t=[{value:"Prerequisites",id:"prerequisites",level:3},{value:"Overview",id:"overview",level:2},{value:"Install Docker",id:"install-docker",level:2},{value:"Allow Running Docker Without sudo",id:"allow-running-docker-without-sudo",level:4},{value:"Install Rust",id:"install-rust",level:2},{value:"Install openssl",id:"install-openssl",level:2},{value:"Install package-config",id:"install-package-config",level:2},{value:"Install sccache",id:"install-sccache",level:2},{value:"Install gcc-12",id:"install-gcc-12",level:2},{value:"Install g++-12",id:"install-g-12",level:2},{value:"Uninstall Existing CUDA (optional)",id:"uninstall-existing-cuda-optional",level:2},{value:"Uninstall a Toolkit runfile installation",id:"uninstall-a-toolkit-runfile-installation",level:3},{value:"Steps to Uninstall CUDA",id:"steps-to-uninstall-cuda",level:3},{value:"Install CUDA",id:"install-cuda",level:2},{value:"Pull Raiko",id:"pull-raiko",level:2},{value:"Install Raiko with RISC0",id:"install-raiko-with-risc0",level:2},{value:"Build Risc0 Program",id:"build-risc0-program",level:2},{value:"Setup Trusted Images for the RISC0 Verifier Contract",id:"setup-trusted-images-for-the-risc0-verifier-contract",level:2},{value:"Set Chain Spec",id:"set-chain-spec",level:2},{value:"Build Raiko",id:"build-raiko",level:2},{value:"Run Raiko",id:"run-raiko",level:2},{value:"Check Logs",id:"check-logs",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"deploy-risc0-prover",children:"Deploy RISC0 Prover"})}),"\n",(0,l.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Machine with CUDA support"}),"\n",(0,l.jsx)(n.li,{children:"L1 Accounts with funds (One for the Prover, One for Prover Registry)"}),"\n",(0,l.jsx)(n.li,{children:"L1 RPC URL"}),"\n",(0,l.jsx)(n.li,{children:"L1 Account Private Key"}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,l.jsxs)(n.p,{children:["Set up Docker, CUDA, and other dependencies to run Risc0 prover on an x86 machine.\nDocumentation: ",(0,l.jsx)(n.a,{href:"https://dev.risczero.com/api/",children:(0,l.jsx)(n.strong,{children:"Risc0 API"})})]}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"install-docker",children:"Install Docker"}),"\n",(0,l.jsxs)(n.p,{children:["Follow the ",(0,l.jsx)(n.a,{href:"https://docs.docker.com/engine/install/ubuntu/",children:"official Docker documentation"})," for installation steps."]}),"\n",(0,l.jsxs)(n.h4,{id:"allow-running-docker-without-sudo",children:["Allow Running Docker Without ",(0,l.jsx)(n.code,{children:"sudo"})]}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Add your user to the ",(0,l.jsx)(n.code,{children:"docker"})," group:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo usermod -aG docker $USER\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Apply the changes to the user group:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"newgrp docker\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Verify that Docker works without sudo:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"docker ps\n"})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"install-rust",children:"Install Rust"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsudo reboot\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-openssl",children:"Install openssl"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo apt-get install libssl-dev\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-package-config",children:"Install package-config"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo apt-get update\nsudo apt-get install pkg-config\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-sccache",children:"Install sccache"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cargo install sccache\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-gcc-12",children:"Install gcc-12"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo apt install gcc-12\ncd /usr/bin\nsudo rm gcc\nsudo ln -s gcc-12 gcc\ngcc --version\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-g-12",children:"Install g++-12"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo apt install g++-12\nsudo rm g++\nsudo ln -s g++-12 g++\ng++ --version\n"})}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"uninstall-existing-cuda-optional",children:"Uninstall Existing CUDA (optional)"}),"\n",(0,l.jsxs)(n.p,{children:["Reference: ",(0,l.jsx)(n.a,{href:"https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#handle-conflicting-installation-methods",children:"NVIDIA CUDA Installation Guide - Handle Conflicting Installation Methods"})]}),"\n",(0,l.jsx)(n.h3,{id:"uninstall-a-toolkit-runfile-installation",children:"Uninstall a Toolkit runfile installation"}),"\n",(0,l.jsx)(n.p,{children:"Use the following command to uninstall a Toolkit runfile installation:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/cuda-X.Y/bin/cuda-uninstaller\n"})}),"\n",(0,l.jsx)(n.h3,{id:"steps-to-uninstall-cuda",children:"Steps to Uninstall CUDA"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Stop NVIDIA Persistenced Service (if running):","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo service nvidia-persistenced stop\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Remove CUDA Toolkit:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:'sudo apt-get --purge remove "*cublas*" "cuda*" "nsight*"\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Remove NVIDIA Drivers:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:'sudo apt-get --purge remove "*nvidia*"\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Remove Source File Installations (if applicable): Assuming the default installation location is /usr/local, remove it using:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo rm -rf /usr/local/cuda*\n"})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"install-cuda",children:"Install CUDA"}),"\n",(0,l.jsxs)(n.p,{children:["Refer to the ",(0,l.jsx)(n.a,{href:"https://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html#runfile-installer",children:"CUDA Quick Start Guide"})," for more information."]}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Download the CUDA installer:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"wget https://developer.download.nvidia.com/compute/cuda/12.6.2/local_installers/cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Run the installer:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo sh cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"If you encounter an error, the installer will create a file at:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"/etc/modprobe.d/nvidia-installer-disable-nouveau.conf\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Reboot the system:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo reboot\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"After rebooting, rerun the installer:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo sh cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Verify CUDA installation:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"ls /usr/local/ | grep cuda\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Add environment variables:\nOpen the ",(0,l.jsx)(n.code,{children:".bashrc"})," file:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"nano ~/.bashrc\n"})}),"\n",(0,l.jsx)(n.p,{children:"Append the following lines to the end of the file:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:'export PATH="/usr/local/cuda/bin:$PATH"\nexport LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Apply the changes:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"source ~/.bashrc\n"})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"pull-raiko",children:"Pull Raiko"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/raiko.git\ncd raiko\ngit checkout risc0-main\ncargo --version\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-raiko-with-risc0",children:"Install Raiko with RISC0"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Navigate to the root directory:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cd /\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Create the required directories:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo mkdir -p /opt/riscv\nsudo chown $USER /opt/riscv\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Switch to the Raiko repository directory:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cd ~/raiko\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Install Raiko with the RISC0 target:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"TARGET=risc0 make install\n"})}),"\n",(0,l.jsx)(n.em,{children:"Note: If you encounter an error during this step, run the following command to refresh your environment variables and retry the installation:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bashrc",children:"source ~/.bashrc\nTARGET=risc0 make install\n"})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"build-risc0-program",children:"Build Risc0 Program"}),"\n",(0,l.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cargo +nightly-2024-04-18 run --bin risc0-builder -F raiko-tasks/in-memory\n"})}),"\n",(0,l.jsx)(n.p,{children:"You will get the image ID from the output of that call."}),"\n",(0,l.jsx)(n.h2,{id:"setup-trusted-images-for-the-risc0-verifier-contract",children:"Setup Trusted Images for the RISC0 Verifier Contract"}),"\n",(0,l.jsx)(n.p,{children:"Run the following command to set an image as trusted:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:'cast send "setImageIdTrusted(bytes32,bool)" true --rpc-url --private-key \n'})}),"\n",(0,l.jsx)(n.h2,{id:"set-chain-spec",children:"Set Chain Spec"}),"\n",(0,l.jsx)(n.p,{children:"Edit the file located at:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"raiko/host/config/chain_spec_list_default.json\n"})}),"\n",(0,l.jsx)(n.p,{children:"Set the values according to your chain configuration."}),"\n",(0,l.jsx)(n.h2,{id:"build-raiko",children:"Build Raiko"}),"\n",(0,l.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cargo build -F cuda --release --features risc0 -F raiko-tasks/in-memory\n"})}),"\n",(0,l.jsx)(n.h2,{id:"run-raiko",children:"Run Raiko"}),"\n",(0,l.jsx)(n.p,{children:"Set the required environment variables:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"export GROTH16_VERIFIER_ADDRESS=0xA2C4Ef228de6BA701660e75Cb06f1c9b29E53069\nexport GROTH16_VERIFIER_RPC_URL=http://139.162.249.67:32002\nexport TASKDB=./raiko-tasks/in-memory\nexport RISC0_PROVER=local\n"})}),"\n",(0,l.jsx)(n.p,{children:"Run Raiko in the background:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"nohup ./target/release/raiko-host --chain-spec-path= > ~/log/output.log 2>&1 &\n"})}),"\n",(0,l.jsx)(n.h2,{id:"check-logs",children:"Check Logs"}),"\n",(0,l.jsx)(n.p,{children:"View the log output:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cat ~/log/output.log\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>c});var l=s(6540);const i={},r=l.createContext(i);function a(e){const n=l.useContext(r);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),l.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[502],{2487:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>t});var l=s(4848),i=s(8453);const r={sidebar_position:2},a="Deploy RISC0 Prover",c={id:"Guides/provers/risc0-prover",title:"Deploy RISC0 Prover",description:"Prerequisites",source:"@site/docs/Guides/provers/risc0-prover.mdx",sourceDirName:"Guides/provers",slug:"/Guides/provers/risc0-prover",permalink:"/docs/Guides/provers/risc0-prover",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/provers/risc0-prover.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Deploy SGX Prover",permalink:"/docs/Guides/provers/sgx-prover"},next:{title:"Deploy SP1 Prover",permalink:"/docs/Guides/provers/sp1-prover"}},o={},t=[{value:"Prerequisites",id:"prerequisites",level:3},{value:"Overview",id:"overview",level:2},{value:"Install Docker",id:"install-docker",level:2},{value:"Allow Running Docker Without sudo",id:"allow-running-docker-without-sudo",level:4},{value:"Install Rust",id:"install-rust",level:2},{value:"Install openssl",id:"install-openssl",level:2},{value:"Install package-config",id:"install-package-config",level:2},{value:"Install sccache",id:"install-sccache",level:2},{value:"Install gcc-12",id:"install-gcc-12",level:2},{value:"Install g++-12",id:"install-g-12",level:2},{value:"Uninstall Existing CUDA (optional)",id:"uninstall-existing-cuda-optional",level:2},{value:"Uninstall a Toolkit runfile installation",id:"uninstall-a-toolkit-runfile-installation",level:3},{value:"Steps to Uninstall CUDA",id:"steps-to-uninstall-cuda",level:3},{value:"Install CUDA",id:"install-cuda",level:2},{value:"Pull Raiko",id:"pull-raiko",level:2},{value:"Install Raiko with RISC0",id:"install-raiko-with-risc0",level:2},{value:"Build Risc0 Program",id:"build-risc0-program",level:2},{value:"Setup Trusted Images for the RISC0 Verifier Contract",id:"setup-trusted-images-for-the-risc0-verifier-contract",level:2},{value:"Set Chain Spec",id:"set-chain-spec",level:2},{value:"Build Raiko",id:"build-raiko",level:2},{value:"Run Raiko",id:"run-raiko",level:2},{value:"Check Logs",id:"check-logs",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"deploy-risc0-prover",children:"Deploy RISC0 Prover"})}),"\n",(0,l.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Machine with CUDA support"}),"\n",(0,l.jsx)(n.li,{children:"L1 Accounts with funds (One for the Prover, One for Prover Registry)"}),"\n",(0,l.jsx)(n.li,{children:"L1 RPC URL"}),"\n",(0,l.jsx)(n.li,{children:"L1 Account Private Key"}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,l.jsxs)(n.p,{children:["Set up Docker, CUDA, and other dependencies to run Risc0 prover on an x86 machine.\nDocumentation: ",(0,l.jsx)(n.a,{href:"https://dev.risczero.com/api/",children:(0,l.jsx)(n.strong,{children:"Risc0 API"})})]}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"install-docker",children:"Install Docker"}),"\n",(0,l.jsxs)(n.p,{children:["Follow the ",(0,l.jsx)(n.a,{href:"https://docs.docker.com/engine/install/ubuntu/",children:"official Docker documentation"})," for installation steps."]}),"\n",(0,l.jsxs)(n.h4,{id:"allow-running-docker-without-sudo",children:["Allow Running Docker Without ",(0,l.jsx)(n.code,{children:"sudo"})]}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Add your user to the ",(0,l.jsx)(n.code,{children:"docker"})," group:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo usermod -aG docker $USER\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Apply the changes to the user group:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"newgrp docker\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Verify that Docker works without sudo:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"docker ps\n"})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"install-rust",children:"Install Rust"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsudo reboot\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-openssl",children:"Install openssl"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo apt-get install libssl-dev\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-package-config",children:"Install package-config"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo apt-get update\nsudo apt-get install pkg-config\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-sccache",children:"Install sccache"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cargo install sccache\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-gcc-12",children:"Install gcc-12"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo apt install gcc-12\ncd /usr/bin\nsudo rm gcc\nsudo ln -s gcc-12 gcc\ngcc --version\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-g-12",children:"Install g++-12"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo apt install g++-12\nsudo rm g++\nsudo ln -s g++-12 g++\ng++ --version\n"})}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"uninstall-existing-cuda-optional",children:"Uninstall Existing CUDA (optional)"}),"\n",(0,l.jsxs)(n.p,{children:["Reference: ",(0,l.jsx)(n.a,{href:"https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#handle-conflicting-installation-methods",children:"NVIDIA CUDA Installation Guide - Handle Conflicting Installation Methods"})]}),"\n",(0,l.jsx)(n.h3,{id:"uninstall-a-toolkit-runfile-installation",children:"Uninstall a Toolkit runfile installation"}),"\n",(0,l.jsx)(n.p,{children:"Use the following command to uninstall a Toolkit runfile installation:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/cuda-X.Y/bin/cuda-uninstaller\n"})}),"\n",(0,l.jsx)(n.h3,{id:"steps-to-uninstall-cuda",children:"Steps to Uninstall CUDA"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Stop NVIDIA Persistenced Service (if running):","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo service nvidia-persistenced stop\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Remove CUDA Toolkit:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:'sudo apt-get --purge remove "*cublas*" "cuda*" "nsight*"\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Remove NVIDIA Drivers:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:'sudo apt-get --purge remove "*nvidia*"\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Remove Source File Installations (if applicable): Assuming the default installation location is /usr/local, remove it using:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo rm -rf /usr/local/cuda*\n"})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"install-cuda",children:"Install CUDA"}),"\n",(0,l.jsxs)(n.p,{children:["Refer to the ",(0,l.jsx)(n.a,{href:"https://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html#runfile-installer",children:"CUDA Quick Start Guide"})," for more information."]}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Download the CUDA installer:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"wget https://developer.download.nvidia.com/compute/cuda/12.6.2/local_installers/cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Run the installer:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo sh cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"If you encounter an error, the installer will create a file at:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"/etc/modprobe.d/nvidia-installer-disable-nouveau.conf\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Reboot the system:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo reboot\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"After rebooting, rerun the installer:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo sh cuda_12.6.2_560.35.03_linux.run\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Verify CUDA installation:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"ls /usr/local/ | grep cuda\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Add environment variables:\nOpen the ",(0,l.jsx)(n.code,{children:".bashrc"})," file:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"nano ~/.bashrc\n"})}),"\n",(0,l.jsx)(n.p,{children:"Append the following lines to the end of the file:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:'export PATH="/usr/local/cuda/bin:$PATH"\nexport LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"\n'})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Apply the changes:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"source ~/.bashrc\n"})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"pull-raiko",children:"Pull Raiko"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/raiko.git\ncd raiko\ngit checkout risc0-main\ncargo --version\n"})}),"\n",(0,l.jsx)(n.h2,{id:"install-raiko-with-risc0",children:"Install Raiko with RISC0"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Navigate to the root directory:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cd /\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Create the required directories:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo mkdir -p /opt/riscv\nsudo chown $USER /opt/riscv\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Switch to the Raiko repository directory:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cd ~/raiko\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Install Raiko with the RISC0 target:","\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"TARGET=risc0 make install\n"})}),"\n",(0,l.jsx)(n.em,{children:"Note: If you encounter an error during this step, run the following command to refresh your environment variables and retry the installation:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bashrc",children:"source ~/.bashrc\nTARGET=risc0 make install\n"})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"build-risc0-program",children:"Build Risc0 Program"}),"\n",(0,l.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cargo +nightly-2024-04-18 run --bin risc0-builder -F raiko-tasks/in-memory\n"})}),"\n",(0,l.jsx)(n.p,{children:"You will get the image ID from the output of that call."}),"\n",(0,l.jsx)(n.h2,{id:"setup-trusted-images-for-the-risc0-verifier-contract",children:"Setup Trusted Images for the RISC0 Verifier Contract"}),"\n",(0,l.jsx)(n.p,{children:"Run the following command to set an image as trusted:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:'cast send "setImageIdTrusted(bytes32,bool)" true --rpc-url --private-key \n'})}),"\n",(0,l.jsx)(n.h2,{id:"set-chain-spec",children:"Set Chain Spec"}),"\n",(0,l.jsx)(n.p,{children:"Edit the file located at:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"raiko/host/config/chain_spec_list_default.json\n"})}),"\n",(0,l.jsx)(n.p,{children:"Set the values according to your chain configuration."}),"\n",(0,l.jsx)(n.h2,{id:"build-raiko",children:"Build Raiko"}),"\n",(0,l.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cargo build -F cuda --release --features risc0 -F raiko-tasks/in-memory\n"})}),"\n",(0,l.jsx)(n.h2,{id:"run-raiko",children:"Run Raiko"}),"\n",(0,l.jsx)(n.p,{children:"Set the required environment variables:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"export GROTH16_VERIFIER_ADDRESS=0xA2C4Ef228de6BA701660e75Cb06f1c9b29E53069\nexport GROTH16_VERIFIER_RPC_URL=http://139.162.249.67:32002\nexport TASKDB=./raiko-tasks/in-memory\nexport RISC0_PROVER=local\n"})}),"\n",(0,l.jsx)(n.p,{children:"Run Raiko in the background:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"nohup ./target/release/raiko-host --chain-spec-path= > ~/log/output.log 2>&1 &\n"})}),"\n",(0,l.jsx)(n.h2,{id:"check-logs",children:"Check Logs"}),"\n",(0,l.jsx)(n.p,{children:"View the log output:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cat ~/log/output.log\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>c});var l=s(6540);const i={},r=l.createContext(i);function a(e){const n=l.useContext(r);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),l.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/997f3e03.b5704c9b.js b/assets/js/997f3e03.aeaffdf5.js similarity index 99% rename from assets/js/997f3e03.b5704c9b.js rename to assets/js/997f3e03.aeaffdf5.js index 3b4d6e7..db22444 100644 --- a/assets/js/997f3e03.b5704c9b.js +++ b/assets/js/997f3e03.aeaffdf5.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[285],{9477:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>u,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var t=r(4848),o=r(8453),s=r(1470),l=r(9365);const i={sidebar_position:3},a="Deploy L2",c={id:"Guides/deploy-l2",title:"Deploy L2",description:"This guide walks you through the process of deploying the L2 network components using Simple Surge Node.",source:"@site/docs/Guides/deploy-l2.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-l2",permalink:"/docs/Guides/deploy-l2",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-l2.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Deploy SP1 Prover",permalink:"/docs/Guides/provers/sp1-prover"},next:{title:"Deploy Protocols on L2",permalink:"/docs/Guides/deploy-l2-protocols"}},u={},d=[{value:"Setup Process",id:"setup-process",level:2},{value:"1. Clone Repository",id:"1-clone-repository",level:3},{value:"2. Configure Environment",id:"2-configure-environment",level:3},{value:"3. Start Components",id:"3-start-components",level:3},{value:"Verification",id:"verification",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deploy-l2",children:"Deploy L2"})}),"\n",(0,t.jsx)(n.p,{children:"This guide walks you through the process of deploying the L2 network components using Simple Surge Node."}),"\n",(0,t.jsx)(n.h2,{id:"setup-process",children:"Setup Process"}),"\n",(0,t.jsx)(n.h3,{id:"1-clone-repository",children:"1. Clone Repository"}),"\n",(0,t.jsx)(n.p,{children:"First, clone the Simple Surge Node repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/simple-surge-node.git\n\ncd simple-surge-node\n"})}),"\n",(0,t.jsx)(n.h3,{id:"2-configure-environment",children:"2. Configure Environment"}),"\n",(0,t.jsx)(n.p,{children:"Create and configure your environment file:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cp .env.sample .env\n"})}),"\n",(0,t.jsxs)(n.admonition,{title:"Environment Configuration",type:"tip",children:[(0,t.jsxs)(n.p,{children:["Edit your ",(0,t.jsx)(n.code,{children:".env"})," file with the appropriate machine address where you deployed the Kurtosis package. Example configuration:"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-env",children:"L1_ENDPOINT_WS=ws://placeholder:32003\nL1_BEACON_HTTP=http://placeholder:33001\n"})}),(0,t.jsx)(n.p,{children:"Make sure to replace the IP address and ports with your actual deployment values."})]}),"\n",(0,t.jsx)(n.h3,{id:"3-start-components",children:"3. Start Components"}),"\n",(0,t.jsx)(n.p,{children:"The deployment consists of three main components that need to be started in sequence:"}),"\n",(0,t.jsxs)(s.A,{children:[(0,t.jsx)(l.A,{value:"driver",label:"Driver",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile nethermind_execution_l2 up -d\n"})})}),(0,t.jsx)(l.A,{value:"proposer",label:"Proposer",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile proposer up -d\n"})})}),(0,t.jsx)(l.A,{value:"prover",label:"Prover Relayer",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile prover up -d\n"})})}),(0,t.jsx)(l.A,{value:"metrics",label:"Metrics",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile metrics up -d\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"verification",children:"Verification"}),"\n",(0,t.jsx)(n.p,{children:"After starting all components, you should:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Check that all Docker containers are running properly"}),"\n",(0,t.jsx)(n.li,{children:"Monitor the logs for any startup errors"}),"\n",(0,t.jsx)(n.li,{children:"Verify network connectivity between components"}),"\n",(0,t.jsx)(n.li,{children:"(Optional) Deploy BlockScout for chain exploration and verification:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile blockscout up -d\n"})}),"\n",(0,t.jsx)(n.p,{children:"Once deployed, you can access BlockScout through these URLs:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["L1 BlockScout: ",(0,t.jsx)(n.a,{href:"http://localhost:35001",children:"http://localhost:35001"})]}),"\n",(0,t.jsxs)(n.li,{children:["L2 BlockScout: ",(0,t.jsx)(n.a,{href:"http://localhost:4000",children:"http://localhost:4000"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"BlockScout provides a web interface for:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Exploring blocks, transactions, and accounts"}),"\n",(0,t.jsx)(n.li,{children:"Verifying smart contracts"}),"\n",(0,t.jsx)(n.li,{children:"Monitoring network activity"}),"\n",(0,t.jsx)(n.li,{children:"Tracking token transfers and balances"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{title:"Component Order",type:"info",children:[(0,t.jsx)(n.p,{children:"It's important to start the components in the specified order:"}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Driver"}),"\n",(0,t.jsx)(n.li,{children:"Proposer"}),"\n",(0,t.jsx)(n.li,{children:"Prover Relayer"}),"\n",(0,t.jsx)(n.li,{children:"Metrics (Prometheus and Grafana)"}),"\n",(0,t.jsx)(n.li,{children:"(Optional) BlockScout"}),"\n"]}),(0,t.jsx)(n.p,{children:"This sequence ensures proper initialization and communication between components."})]}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(n.p,{children:"If you encounter issues:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Verify all environment variables are correctly set"}),"\n",(0,t.jsx)(n.li,{children:"Check Docker logs for specific error messages"}),"\n",(0,t.jsx)(n.li,{children:"Ensure all required ports are accessible"}),"\n",(0,t.jsx)(n.li,{children:"Confirm network connectivity between components"}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},9365:(e,n,r)=>{r.d(n,{A:()=>l});r(6540);var t=r(4164);const o={tabItem:"tabItem_Ymn6"};var s=r(4848);function l(e){let{children:n,hidden:r,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,t.A)(o.tabItem,l),hidden:r,children:n})}},1470:(e,n,r)=>{r.d(n,{A:()=>k});var t=r(6540),o=r(4164),s=r(3104),l=r(6347),i=r(205),a=r(7485),c=r(1682),u=r(679);function d(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:o}}=e;return{value:n,label:r,attributes:t,default:o}}))}(r);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:r}=e;const o=(0,l.W6)(),s=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,a.aZ)(s),(0,t.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(o.location.search);n.set(s,e),o.replace({...o.location,search:n.toString()})}),[s,o])]}function f(e){const{defaultValue:n,queryString:r=!1,groupId:o}=e,s=h(e),[l,a]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:s}))),[c,d]=m({queryString:r,groupId:o}),[f,x]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,s]=(0,u.Dv)(r);return[o,(0,t.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:o}),b=(()=>{const e=c??f;return p({value:e,tabValues:s})?e:null})();(0,i.A)((()=>{b&&a(b)}),[b]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),x(e)}),[d,x,s]),tabValues:s}}var x=r(2303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=r(4848);function g(e){let{className:n,block:r,selectedValue:t,selectValue:l,tabValues:i}=e;const a=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),u=e=>{const n=e.currentTarget,r=a.indexOf(n),o=i[r].value;o!==t&&(c(n),l(o))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;n=a[r]??a[0];break}case"ArrowLeft":{const r=a.indexOf(e.currentTarget)-1;n=a[r]??a[a.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.A)("tabs",{"tabs--block":r},n),children:i.map((e=>{let{value:n,label:r,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>a.push(e),onKeyDown:d,onClick:u,...s,className:(0,o.A)("tabs__item",b.tabItem,s?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function j(e){let{lazy:n,children:r,selectedValue:s}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=l.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:(0,o.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function y(e){const n=f(e);return(0,v.jsxs)("div",{className:(0,o.A)("tabs-container",b.tabList),children:[(0,v.jsx)(g,{...n,...e}),(0,v.jsx)(j,{...n,...e})]})}function k(e){const n=(0,x.A)();return(0,v.jsx)(y,{...e,children:d(e.children)},String(n))}},8453:(e,n,r)=>{r.d(n,{R:()=>l,x:()=>i});var t=r(6540);const o={},s=t.createContext(o);function l(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[285],{9477:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>u,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var t=r(4848),o=r(8453),s=r(1470),l=r(9365);const i={sidebar_position:3},a="Deploy L2",c={id:"Guides/deploy-l2",title:"Deploy L2",description:"This guide walks you through the process of deploying the L2 network components using Simple Surge Node.",source:"@site/docs/Guides/deploy-l2.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-l2",permalink:"/docs/Guides/deploy-l2",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-l2.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Deploy SP1 Prover",permalink:"/docs/Guides/provers/sp1-prover"},next:{title:"Deploy Protocols on L2",permalink:"/docs/Guides/deploy-l2-protocols"}},u={},d=[{value:"Setup Process",id:"setup-process",level:2},{value:"1. Clone Repository",id:"1-clone-repository",level:3},{value:"2. Configure Environment",id:"2-configure-environment",level:3},{value:"3. Start Components",id:"3-start-components",level:3},{value:"Verification",id:"verification",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deploy-l2",children:"Deploy L2"})}),"\n",(0,t.jsx)(n.p,{children:"This guide walks you through the process of deploying the L2 network components using Simple Surge Node."}),"\n",(0,t.jsx)(n.h2,{id:"setup-process",children:"Setup Process"}),"\n",(0,t.jsx)(n.h3,{id:"1-clone-repository",children:"1. Clone Repository"}),"\n",(0,t.jsx)(n.p,{children:"First, clone the Simple Surge Node repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/NethermindEth/simple-surge-node.git\n\ncd simple-surge-node\n"})}),"\n",(0,t.jsx)(n.h3,{id:"2-configure-environment",children:"2. Configure Environment"}),"\n",(0,t.jsx)(n.p,{children:"Create and configure your environment file:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cp .env.sample .env\n"})}),"\n",(0,t.jsxs)(n.admonition,{title:"Environment Configuration",type:"tip",children:[(0,t.jsxs)(n.p,{children:["Edit your ",(0,t.jsx)(n.code,{children:".env"})," file with the appropriate machine address where you deployed the Kurtosis package. Example configuration:"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-env",children:"L1_ENDPOINT_WS=ws://placeholder:32003\nL1_BEACON_HTTP=http://placeholder:33001\n"})}),(0,t.jsx)(n.p,{children:"Make sure to replace the IP address and ports with your actual deployment values."})]}),"\n",(0,t.jsx)(n.h3,{id:"3-start-components",children:"3. Start Components"}),"\n",(0,t.jsx)(n.p,{children:"The deployment consists of three main components that need to be started in sequence:"}),"\n",(0,t.jsxs)(s.A,{children:[(0,t.jsx)(l.A,{value:"driver",label:"Driver",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile nethermind_execution_l2 up -d\n"})})}),(0,t.jsx)(l.A,{value:"proposer",label:"Proposer",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile proposer up -d\n"})})}),(0,t.jsx)(l.A,{value:"prover",label:"Prover Relayer",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile prover up -d\n"})})}),(0,t.jsx)(l.A,{value:"metrics",label:"Metrics",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile metrics up -d\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"verification",children:"Verification"}),"\n",(0,t.jsx)(n.p,{children:"After starting all components, you should:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Check that all Docker containers are running properly"}),"\n",(0,t.jsx)(n.li,{children:"Monitor the logs for any startup errors"}),"\n",(0,t.jsx)(n.li,{children:"Verify network connectivity between components"}),"\n",(0,t.jsx)(n.li,{children:"(Optional) Deploy BlockScout for chain exploration and verification:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose --profile blockscout up -d\n"})}),"\n",(0,t.jsx)(n.p,{children:"Once deployed, you can access BlockScout through these URLs:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["L1 BlockScout: ",(0,t.jsx)(n.a,{href:"http://localhost:35001",children:"http://localhost:35001"})]}),"\n",(0,t.jsxs)(n.li,{children:["L2 BlockScout: ",(0,t.jsx)(n.a,{href:"http://localhost:4000",children:"http://localhost:4000"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"BlockScout provides a web interface for:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Exploring blocks, transactions, and accounts"}),"\n",(0,t.jsx)(n.li,{children:"Verifying smart contracts"}),"\n",(0,t.jsx)(n.li,{children:"Monitoring network activity"}),"\n",(0,t.jsx)(n.li,{children:"Tracking token transfers and balances"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{title:"Component Order",type:"info",children:[(0,t.jsx)(n.p,{children:"It's important to start the components in the specified order:"}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Driver"}),"\n",(0,t.jsx)(n.li,{children:"Proposer"}),"\n",(0,t.jsx)(n.li,{children:"Prover Relayer"}),"\n",(0,t.jsx)(n.li,{children:"Metrics (Prometheus and Grafana)"}),"\n",(0,t.jsx)(n.li,{children:"(Optional) BlockScout"}),"\n"]}),(0,t.jsx)(n.p,{children:"This sequence ensures proper initialization and communication between components."})]}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(n.p,{children:"If you encounter issues:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Verify all environment variables are correctly set"}),"\n",(0,t.jsx)(n.li,{children:"Check Docker logs for specific error messages"}),"\n",(0,t.jsx)(n.li,{children:"Ensure all required ports are accessible"}),"\n",(0,t.jsx)(n.li,{children:"Confirm network connectivity between components"}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},9365:(e,n,r)=>{r.d(n,{A:()=>l});r(6540);var t=r(4164);const o={tabItem:"tabItem_Ymn6"};var s=r(4848);function l(e){let{children:n,hidden:r,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,t.A)(o.tabItem,l),hidden:r,children:n})}},1470:(e,n,r)=>{r.d(n,{A:()=>k});var t=r(6540),o=r(4164),s=r(3104),l=r(6347),i=r(205),a=r(7485),c=r(1682),u=r(679);function d(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:o}}=e;return{value:n,label:r,attributes:t,default:o}}))}(r);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:r}=e;const o=(0,l.W6)(),s=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,a.aZ)(s),(0,t.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(o.location.search);n.set(s,e),o.replace({...o.location,search:n.toString()})}),[s,o])]}function f(e){const{defaultValue:n,queryString:r=!1,groupId:o}=e,s=h(e),[l,a]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:s}))),[c,d]=m({queryString:r,groupId:o}),[f,x]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,s]=(0,u.Dv)(r);return[o,(0,t.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:o}),b=(()=>{const e=c??f;return p({value:e,tabValues:s})?e:null})();(0,i.A)((()=>{b&&a(b)}),[b]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),x(e)}),[d,x,s]),tabValues:s}}var x=r(2303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=r(4848);function g(e){let{className:n,block:r,selectedValue:t,selectValue:l,tabValues:i}=e;const a=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),u=e=>{const n=e.currentTarget,r=a.indexOf(n),o=i[r].value;o!==t&&(c(n),l(o))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;n=a[r]??a[0];break}case"ArrowLeft":{const r=a.indexOf(e.currentTarget)-1;n=a[r]??a[a.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.A)("tabs",{"tabs--block":r},n),children:i.map((e=>{let{value:n,label:r,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>a.push(e),onKeyDown:d,onClick:u,...s,className:(0,o.A)("tabs__item",b.tabItem,s?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function j(e){let{lazy:n,children:r,selectedValue:s}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=l.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:(0,o.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function y(e){const n=f(e);return(0,v.jsxs)("div",{className:(0,o.A)("tabs-container",b.tabList),children:[(0,v.jsx)(g,{...n,...e}),(0,v.jsx)(j,{...n,...e})]})}function k(e){const n=(0,x.A)();return(0,v.jsx)(y,{...e,children:d(e.children)},String(n))}},8453:(e,n,r)=>{r.d(n,{R:()=>l,x:()=>i});var t=r(6540);const o={},s=t.createContext(o);function l(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/abff299a.b2a64bb7.js b/assets/js/abff299a.2c844f20.js similarity index 98% rename from assets/js/abff299a.b2a64bb7.js rename to assets/js/abff299a.2c844f20.js index 231d7d5..f717d5e 100644 --- a/assets/js/abff299a.b2a64bb7.js +++ b/assets/js/abff299a.2c844f20.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[99],{2400:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>n,metadata:()=>d,toc:()=>a});var o=s(4848),i=s(8453);const n={sidebar_position:2},r="Common Issues",d={id:"Troubleshooting/common-issues",title:"Common Issues",description:"This page contains common issues and their solutions.",source:"@site/docs/Troubleshooting/common-issues.mdx",sourceDirName:"Troubleshooting",slug:"/Troubleshooting/common-issues",permalink:"/docs/Troubleshooting/common-issues",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Troubleshooting/common-issues.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Error Codes",permalink:"/docs/Troubleshooting/error-codes"}},l={},a=[{value:"After each L1 - L2 bridged tx, why isn't it processed until a new L2 block is produced?",id:"after-each-l1---l2-bridged-tx-why-isnt-it-processed-until-a-new-l2-block-is-produced",level:4},{value:"For L2 - L1 bridged tx to be processed, there should be L1 - L2 bridged txs. Why is this?",id:"for-l2---l1-bridged-tx-to-be-processed-there-should-be-l1---l2-bridged-txs-why-is-this",level:4},{value:"I have bridged 3 times from L2 to L1, but bridged txs are not being processed.",id:"i-have-bridged-3-times-from-l2-to-l1-but-bridged-txs-are-not-being-processed",level:4}];function c(e){const t={h1:"h1",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"common-issues",children:"Common Issues"})}),"\n",(0,o.jsx)(t.p,{children:"This page contains common issues and their solutions."}),"\n",(0,o.jsx)(t.h4,{id:"after-each-l1---l2-bridged-tx-why-isnt-it-processed-until-a-new-l2-block-is-produced",children:"After each L1 - L2 bridged tx, why isn't it processed until a new L2 block is produced?"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"L2 receives L1's state via an anchor transaction. The anchor transaction sends the state root at the last L1 block. So, to get the state root of the bridging txn block, we need another block on top of it. If we are not proposing empty blocks, then at least one L2 tx needs to be sent to force a new block to be generated."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Another thing to remember: This extra L2 block must be a part of the L1 block that follows the L1 block containing the bridging txn. This kind of happens implicitly at the moment since kurtosis blocks are fast."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h4,{id:"for-l2---l1-bridged-tx-to-be-processed-there-should-be-l1---l2-bridged-txs-why-is-this",children:"For L2 - L1 bridged tx to be processed, there should be L1 - L2 bridged txs. Why is this?"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"The main requirement is that if 1 ETH is bridged from L1 to L2, and in return when we bridge back same 1 ETH from L2 -> L1, we also end up paying a small fee to the relayer. That fee is added on top of 1 ETH."}),"\n",(0,o.jsx)(t.li,{children:"Now, unless a lot of people have bridged in and the pool is larger than 1 eth. This won\u2019t work, since the fee can never be paid as the total amount in the bridge is 1 ETH itself."}),"\n"]}),"\n",(0,o.jsx)(t.h4,{id:"i-have-bridged-3-times-from-l2-to-l1-but-bridged-txs-are-not-being-processed",children:"I have bridged 3 times from L2 to L1, but bridged txs are not being processed."}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"Verification attempt every 4 blocks, your txn might not be verified yet."}),"\n",(0,o.jsx)(t.li,{children:"Try bridging again."}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>d});var o=s(6540);const i={},n=o.createContext(i);function r(e){const t=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[99],{2400:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>n,metadata:()=>d,toc:()=>a});var o=s(4848),i=s(8453);const n={sidebar_position:2},r="Common Issues",d={id:"Troubleshooting/common-issues",title:"Common Issues",description:"This page contains common issues and their solutions.",source:"@site/docs/Troubleshooting/common-issues.mdx",sourceDirName:"Troubleshooting",slug:"/Troubleshooting/common-issues",permalink:"/docs/Troubleshooting/common-issues",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Troubleshooting/common-issues.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Error Codes",permalink:"/docs/Troubleshooting/error-codes"}},l={},a=[{value:"After each L1 - L2 bridged tx, why isn't it processed until a new L2 block is produced?",id:"after-each-l1---l2-bridged-tx-why-isnt-it-processed-until-a-new-l2-block-is-produced",level:4},{value:"For L2 - L1 bridged tx to be processed, there should be L1 - L2 bridged txs. Why is this?",id:"for-l2---l1-bridged-tx-to-be-processed-there-should-be-l1---l2-bridged-txs-why-is-this",level:4},{value:"I have bridged 3 times from L2 to L1, but bridged txs are not being processed.",id:"i-have-bridged-3-times-from-l2-to-l1-but-bridged-txs-are-not-being-processed",level:4}];function c(e){const t={h1:"h1",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"common-issues",children:"Common Issues"})}),"\n",(0,o.jsx)(t.p,{children:"This page contains common issues and their solutions."}),"\n",(0,o.jsx)(t.h4,{id:"after-each-l1---l2-bridged-tx-why-isnt-it-processed-until-a-new-l2-block-is-produced",children:"After each L1 - L2 bridged tx, why isn't it processed until a new L2 block is produced?"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"L2 receives L1's state via an anchor transaction. The anchor transaction sends the state root at the last L1 block. So, to get the state root of the bridging txn block, we need another block on top of it. If we are not proposing empty blocks, then at least one L2 tx needs to be sent to force a new block to be generated."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Another thing to remember: This extra L2 block must be a part of the L1 block that follows the L1 block containing the bridging txn. This kind of happens implicitly at the moment since kurtosis blocks are fast."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h4,{id:"for-l2---l1-bridged-tx-to-be-processed-there-should-be-l1---l2-bridged-txs-why-is-this",children:"For L2 - L1 bridged tx to be processed, there should be L1 - L2 bridged txs. Why is this?"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"The main requirement is that if 1 ETH is bridged from L1 to L2, and in return when we bridge back same 1 ETH from L2 -> L1, we also end up paying a small fee to the relayer. That fee is added on top of 1 ETH."}),"\n",(0,o.jsx)(t.li,{children:"Now, unless a lot of people have bridged in and the pool is larger than 1 eth. This won\u2019t work, since the fee can never be paid as the total amount in the bridge is 1 ETH itself."}),"\n"]}),"\n",(0,o.jsx)(t.h4,{id:"i-have-bridged-3-times-from-l2-to-l1-but-bridged-txs-are-not-being-processed",children:"I have bridged 3 times from L2 to L1, but bridged txs are not being processed."}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"Verification attempt every 4 blocks, your txn might not be verified yet."}),"\n",(0,o.jsx)(t.li,{children:"Try bridging again."}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>d});var o=s(6540);const i={},n=o.createContext(i);function r(e){const t=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ad528f71.426073a6.js b/assets/js/ad528f71.852c549c.js similarity index 98% rename from assets/js/ad528f71.426073a6.js rename to assets/js/ad528f71.852c549c.js index 1cf71aa..eafcbcd 100644 --- a/assets/js/ad528f71.426073a6.js +++ b/assets/js/ad528f71.852c549c.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[11],{3404:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var o=r(4848),i=r(8453);const t={sidebar_position:2},s="Prover Setup",c={id:"core-concepts/proposing",title:"Prover Setup",description:"Surge supports two types of provers for block verification:",source:"@site/docs/core-concepts/proposing.mdx",sourceDirName:"core-concepts",slug:"/core-concepts/proposing",permalink:"/docs/core-concepts/proposing",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/core-concepts/proposing.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Bridging",permalink:"/docs/core-concepts/bridging"},next:{title:"Block Proposer Guide",permalink:"/docs/core-concepts/sequencing"}},l={},d=[{value:"Nethermind TEE Prover",id:"nethermind-tee-prover",level:2},{value:"Components",id:"components",level:3},{value:"Setup Requirements",id:"setup-requirements",level:3},{value:"RethZk Prover",id:"rethzk-prover",level:2},{value:"Key Features",id:"key-features",level:3},{value:"Prover Economics",id:"prover-economics",level:2}];function a(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"prover-setup",children:"Prover Setup"})}),"\n",(0,o.jsx)(n.p,{children:"Surge supports two types of provers for block verification:"}),"\n",(0,o.jsx)(n.h2,{id:"nethermind-tee-prover",children:"Nethermind TEE Prover"}),"\n",(0,o.jsx)(n.p,{children:"The Nethermind TEE (Trusted Execution Environment) Prover leverages secure hardware enclaves for block verification. This prover is currently in development with the following features:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Attestation extraction and verification"}),"\n",(0,o.jsx)(n.li,{children:"RPC snooping for payload execution interception"}),"\n",(0,o.jsx)(n.li,{children:"TD (Transaction Data) attestations for block verification"}),"\n",(0,o.jsx)(n.li,{children:"Smart contract integration for attestation verification"}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"components",children:"Components"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"RPC Snooper"}),": Intercepts payload executions between CL-EL"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Attestation System"}),": Stores and verifies payload executions"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"TDX Verifier"}),": Integrates with core rollup contracts"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Cloud Deployment"}),": Supports both Azure and GCP environments"]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"setup-requirements",children:"Setup Requirements"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Intel TDX-compatible hardware"}),"\n",(0,o.jsx)(n.li,{children:"Secure enclave configuration"}),"\n",(0,o.jsx)(n.li,{children:"Network connectivity to L1 and L2 nodes"}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsx)(n.p,{children:"Detailed setup instructions will be provided once the TEE prover development is complete."})}),"\n",(0,o.jsx)(n.h2,{id:"rethzk-prover",children:"RethZk Prover"}),"\n",(0,o.jsx)(n.p,{children:"The RethZk Prover is an alternative proving system based on zero-knowledge proofs. This system is designed to provide:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"High performance block verification"}),"\n",(0,o.jsx)(n.li,{children:"Compatible with Ethereum's execution environment"}),"\n",(0,o.jsx)(n.li,{children:"Efficient proof generation and verification"}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"key-features",children:"Key Features"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Zero-knowledge proof generation"}),"\n",(0,o.jsx)(n.li,{children:"Optimized for EVM compatibility"}),"\n",(0,o.jsx)(n.li,{children:"Scalable proof verification"}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{title:"Development Status",type:"note",children:(0,o.jsx)(n.p,{children:"The RethZk Prover is currently under active development. Setup instructions and deployment guides will be provided upon completion."})}),"\n",(0,o.jsx)(n.h2,{id:"prover-economics",children:"Prover Economics"}),"\n",(0,o.jsx)(n.p,{children:"Provers play a crucial role in the Surge ecosystem and are compensated through:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"A share of base fees from transaction processing"}),"\n",(0,o.jsx)(n.li,{children:"Additional rewards for timely proof generation"}),"\n",(0,o.jsx)(n.li,{children:"Performance-based incentives"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["For detailed information about prover compensation and economics, please refer to the ",(0,o.jsx)(n.a,{href:"/docs/core-concepts",children:"Core Concepts"})," section."]})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>c});var o=r(6540);const i={},t=o.createContext(i);function s(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[11],{3404:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var o=r(4848),i=r(8453);const t={sidebar_position:2},s="Prover Setup",c={id:"core-concepts/proposing",title:"Prover Setup",description:"Surge supports two types of provers for block verification:",source:"@site/docs/core-concepts/proposing.mdx",sourceDirName:"core-concepts",slug:"/core-concepts/proposing",permalink:"/docs/core-concepts/proposing",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/core-concepts/proposing.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Bridging",permalink:"/docs/core-concepts/bridging"},next:{title:"Block Proposer Guide",permalink:"/docs/core-concepts/sequencing"}},l={},d=[{value:"Nethermind TEE Prover",id:"nethermind-tee-prover",level:2},{value:"Components",id:"components",level:3},{value:"Setup Requirements",id:"setup-requirements",level:3},{value:"RethZk Prover",id:"rethzk-prover",level:2},{value:"Key Features",id:"key-features",level:3},{value:"Prover Economics",id:"prover-economics",level:2}];function a(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"prover-setup",children:"Prover Setup"})}),"\n",(0,o.jsx)(n.p,{children:"Surge supports two types of provers for block verification:"}),"\n",(0,o.jsx)(n.h2,{id:"nethermind-tee-prover",children:"Nethermind TEE Prover"}),"\n",(0,o.jsx)(n.p,{children:"The Nethermind TEE (Trusted Execution Environment) Prover leverages secure hardware enclaves for block verification. This prover is currently in development with the following features:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Attestation extraction and verification"}),"\n",(0,o.jsx)(n.li,{children:"RPC snooping for payload execution interception"}),"\n",(0,o.jsx)(n.li,{children:"TD (Transaction Data) attestations for block verification"}),"\n",(0,o.jsx)(n.li,{children:"Smart contract integration for attestation verification"}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"components",children:"Components"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"RPC Snooper"}),": Intercepts payload executions between CL-EL"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Attestation System"}),": Stores and verifies payload executions"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"TDX Verifier"}),": Integrates with core rollup contracts"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Cloud Deployment"}),": Supports both Azure and GCP environments"]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"setup-requirements",children:"Setup Requirements"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Intel TDX-compatible hardware"}),"\n",(0,o.jsx)(n.li,{children:"Secure enclave configuration"}),"\n",(0,o.jsx)(n.li,{children:"Network connectivity to L1 and L2 nodes"}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsx)(n.p,{children:"Detailed setup instructions will be provided once the TEE prover development is complete."})}),"\n",(0,o.jsx)(n.h2,{id:"rethzk-prover",children:"RethZk Prover"}),"\n",(0,o.jsx)(n.p,{children:"The RethZk Prover is an alternative proving system based on zero-knowledge proofs. This system is designed to provide:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"High performance block verification"}),"\n",(0,o.jsx)(n.li,{children:"Compatible with Ethereum's execution environment"}),"\n",(0,o.jsx)(n.li,{children:"Efficient proof generation and verification"}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"key-features",children:"Key Features"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Zero-knowledge proof generation"}),"\n",(0,o.jsx)(n.li,{children:"Optimized for EVM compatibility"}),"\n",(0,o.jsx)(n.li,{children:"Scalable proof verification"}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{title:"Development Status",type:"note",children:(0,o.jsx)(n.p,{children:"The RethZk Prover is currently under active development. Setup instructions and deployment guides will be provided upon completion."})}),"\n",(0,o.jsx)(n.h2,{id:"prover-economics",children:"Prover Economics"}),"\n",(0,o.jsx)(n.p,{children:"Provers play a crucial role in the Surge ecosystem and are compensated through:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"A share of base fees from transaction processing"}),"\n",(0,o.jsx)(n.li,{children:"Additional rewards for timely proof generation"}),"\n",(0,o.jsx)(n.li,{children:"Performance-based incentives"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["For detailed information about prover compensation and economics, please refer to the ",(0,o.jsx)(n.a,{href:"/docs/core-concepts",children:"Core Concepts"})," section."]})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>c});var o=r(6540);const i={},t=o.createContext(i);function s(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c60f1aa1.ea657486.js b/assets/js/c60f1aa1.1c6b50fa.js similarity index 98% rename from assets/js/c60f1aa1.ea657486.js rename to assets/js/c60f1aa1.1c6b50fa.js index 3712b44..d84e6f2 100644 --- a/assets/js/c60f1aa1.ea657486.js +++ b/assets/js/c60f1aa1.1c6b50fa.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[934],{7469:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>d,toc:()=>a});var i=s(4848),r=s(8453);const t={sidebar_position:1},o="Bridging",d={id:"core-concepts/bridging",title:"Bridging",description:"Surge uses Taiko's secure bridging infrastructure to enable cross-chain asset transfers between Ethereum L1 and Surge. This documentation provides an overview of how bridging works in Surge.",source:"@site/docs/core-concepts/bridging.mdx",sourceDirName:"core-concepts",slug:"/core-concepts/bridging",permalink:"/docs/core-concepts/bridging",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/core-concepts/bridging.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Core Concepts",permalink:"/docs/core-concepts/"},next:{title:"Prover Setup",permalink:"/docs/core-concepts/proposing"}},c={},a=[{value:"Overview",id:"overview",level:2},{value:"How It Works",id:"how-it-works",level:2},{value:"Supported Assets",id:"supported-assets",level:2},{value:"Security Model",id:"security-model",level:2},{value:"Deep Dive",id:"deep-dive",level:2}];function l(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"bridging",children:"Bridging"})}),"\n",(0,i.jsx)(n.p,{children:"Surge uses Taiko's secure bridging infrastructure to enable cross-chain asset transfers between Ethereum L1 and Surge. This documentation provides an overview of how bridging works in Surge."}),"\n",(0,i.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"The bridge enables users to transfer ETH and tokens (ERC-20, ERC-721, ERC-1155) between Ethereum and Surge. It leverages Taiko's battle-tested bridge implementation, which uses a secure cross-chain messaging system based on merkle proofs."}),"\n",(0,i.jsx)(n.h2,{id:"how-it-works",children:"How It Works"}),"\n",(0,i.jsx)(n.p,{children:"The bridging process follows these key steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Message Sending"}),": When you initiate a bridge transfer, your assets are locked in a bridge contract on the source chain, and a message is sent through a Signal Service."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Proof Generation"}),": The system generates a merkle proof that verifies your message was properly recorded on the source chain."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Message Processing"}),": On the destination chain, the proof is verified, and your assets are released or minted accordingly."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"supported-assets",children:"Supported Assets"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"ETH"}),"\n",(0,i.jsx)(n.li,{children:"ERC-20 tokens"}),"\n",(0,i.jsx)(n.li,{children:"ERC-721 tokens (NFTs)"}),"\n",(0,i.jsx)(n.li,{children:"ERC-1155 tokens"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"security-model",children:"Security Model"}),"\n",(0,i.jsx)(n.p,{children:"The bridge's security is based on:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Merkle proof verification"}),"\n",(0,i.jsx)(n.li,{children:"Cross-chain state root synchronization"}),"\n",(0,i.jsx)(n.li,{children:"Smart contract-based message verification"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"deep-dive",children:"Deep Dive"}),"\n",(0,i.jsx)(n.p,{children:"For a comprehensive understanding of the bridging mechanics, including:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Detailed message flow"}),"\n",(0,i.jsx)(n.li,{children:"Signal Service implementation"}),"\n",(0,i.jsx)(n.li,{children:"Cross-chain proof verification"}),"\n",(0,i.jsx)(n.li,{children:"Token vault system"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Please refer to the ",(0,i.jsx)(n.a,{href:"https://docs.taiko.xyz/concepts/bridging",children:"Taiko Bridge Documentation"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Always verify transaction details and recipient addresses when bridging assets. While the bridge protocol is secure, user errors cannot be reversed."})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"The bridge UI and contract addresses will be provided once the network is live."})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>d});var i=s(6540);const r={},t=i.createContext(r);function o(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[934],{7469:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>d,toc:()=>a});var i=s(4848),r=s(8453);const t={sidebar_position:1},o="Bridging",d={id:"core-concepts/bridging",title:"Bridging",description:"Surge uses Taiko's secure bridging infrastructure to enable cross-chain asset transfers between Ethereum L1 and Surge. This documentation provides an overview of how bridging works in Surge.",source:"@site/docs/core-concepts/bridging.mdx",sourceDirName:"core-concepts",slug:"/core-concepts/bridging",permalink:"/docs/core-concepts/bridging",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/core-concepts/bridging.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Core Concepts",permalink:"/docs/core-concepts/"},next:{title:"Prover Setup",permalink:"/docs/core-concepts/proposing"}},c={},a=[{value:"Overview",id:"overview",level:2},{value:"How It Works",id:"how-it-works",level:2},{value:"Supported Assets",id:"supported-assets",level:2},{value:"Security Model",id:"security-model",level:2},{value:"Deep Dive",id:"deep-dive",level:2}];function l(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"bridging",children:"Bridging"})}),"\n",(0,i.jsx)(n.p,{children:"Surge uses Taiko's secure bridging infrastructure to enable cross-chain asset transfers between Ethereum L1 and Surge. This documentation provides an overview of how bridging works in Surge."}),"\n",(0,i.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"The bridge enables users to transfer ETH and tokens (ERC-20, ERC-721, ERC-1155) between Ethereum and Surge. It leverages Taiko's battle-tested bridge implementation, which uses a secure cross-chain messaging system based on merkle proofs."}),"\n",(0,i.jsx)(n.h2,{id:"how-it-works",children:"How It Works"}),"\n",(0,i.jsx)(n.p,{children:"The bridging process follows these key steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Message Sending"}),": When you initiate a bridge transfer, your assets are locked in a bridge contract on the source chain, and a message is sent through a Signal Service."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Proof Generation"}),": The system generates a merkle proof that verifies your message was properly recorded on the source chain."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Message Processing"}),": On the destination chain, the proof is verified, and your assets are released or minted accordingly."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"supported-assets",children:"Supported Assets"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"ETH"}),"\n",(0,i.jsx)(n.li,{children:"ERC-20 tokens"}),"\n",(0,i.jsx)(n.li,{children:"ERC-721 tokens (NFTs)"}),"\n",(0,i.jsx)(n.li,{children:"ERC-1155 tokens"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"security-model",children:"Security Model"}),"\n",(0,i.jsx)(n.p,{children:"The bridge's security is based on:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Merkle proof verification"}),"\n",(0,i.jsx)(n.li,{children:"Cross-chain state root synchronization"}),"\n",(0,i.jsx)(n.li,{children:"Smart contract-based message verification"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"deep-dive",children:"Deep Dive"}),"\n",(0,i.jsx)(n.p,{children:"For a comprehensive understanding of the bridging mechanics, including:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Detailed message flow"}),"\n",(0,i.jsx)(n.li,{children:"Signal Service implementation"}),"\n",(0,i.jsx)(n.li,{children:"Cross-chain proof verification"}),"\n",(0,i.jsx)(n.li,{children:"Token vault system"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Please refer to the ",(0,i.jsx)(n.a,{href:"https://docs.taiko.xyz/concepts/bridging",children:"Taiko Bridge Documentation"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Always verify transaction details and recipient addresses when bridging assets. While the bridge protocol is secure, user errors cannot be reversed."})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"The bridge UI and contract addresses will be provided once the network is live."})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>d});var i=s(6540);const r={},t=i.createContext(r);function o(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cffb26af.7413fc4b.js b/assets/js/cffb26af.3cf46576.js similarity index 99% rename from assets/js/cffb26af.7413fc4b.js rename to assets/js/cffb26af.3cf46576.js index 4872d50..3a9479b 100644 --- a/assets/js/cffb26af.7413fc4b.js +++ b/assets/js/cffb26af.3cf46576.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[905],{2312:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var t=r(4848),i=r(8453);const s={sidebar_position:1},o="Deploy SGX Prover",a={id:"Guides/provers/sgx-prover",title:"Deploy SGX Prover",description:"Prerequisites",source:"@site/docs/Guides/provers/sgx-prover.mdx",sourceDirName:"Guides/provers",slug:"/Guides/provers/sgx-prover",permalink:"/docs/Guides/provers/sgx-prover",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/provers/sgx-prover.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Set up a Prover",permalink:"/docs/Guides/provers/"},next:{title:"Deploy RISC0 Prover",permalink:"/docs/Guides/provers/risc0-prover"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:3},{value:"1. Fetch Collateral Information",id:"1-fetch-collateral-information",level:3},{value:"2. Build and Initialize Image",id:"2-build-and-initialize-image",level:3},{value:"3. Get Quote and Measurement Values",id:"3-get-quote-and-measurement-values",level:3},{value:"4. Register Collaterals",id:"4-register-collaterals",level:3},{value:"Set Environment Variables",id:"set-environment-variables",level:3},{value:"SGX TCB Setup Script",id:"sgx-tcb-setup-script",level:3},{value:"5. Configure and Run Raiko",id:"5-configure-and-run-raiko",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components},{Details:r}=n;return r||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deploy-sgx-prover",children:"Deploy SGX Prover"})}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Machine with SGX support"}),"\n",(0,t.jsx)(n.li,{children:"L1 Accounts with funds (One for the Prover, One for Prover Registry)"}),"\n",(0,t.jsx)(n.li,{children:"L1 RPC URL"}),"\n",(0,t.jsx)(n.li,{children:"L1 Account Private Key"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"1-fetch-collateral-information",children:"1. Fetch Collateral Information"}),"\n",(0,t.jsx)(n.p,{children:"First, fetch the collateral information from Intel:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'FMSPC="00906ED50000"\n\nTCB_FILE="tcb.json"\nQE_IDENTITY_FILE="qe_identity.json"\n\ncurl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/tcb?fmspc=${FMSPC}" > ${TCB_FILE}\ncurl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/qe/identity" > ${QE_IDENTITY_FILE}\n\njq \'.tcbInfo.fmspc |= ascii_downcase\' ${TCB_FILE} > temp.json && mv temp.json ${TCB_FILE}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"2-build-and-initialize-image",children:"2. Build and Initialize Image"}),"\n",(0,t.jsxs)(n.p,{children:["Follow the instructions at ",(0,t.jsx)(n.a,{href:"https://github.com/NethermindEth/raiko/blob/main/docs/README_Docker_and_RA.md",children:"Raiko Docker and RA Documentation"})," to build and initialize the image."]}),"\n",(0,t.jsx)(n.h3,{id:"3-get-quote-and-measurement-values",children:"3. Get Quote and Measurement Values"}),"\n",(0,t.jsxs)(n.p,{children:["Retrieve the ",(0,t.jsx)(n.code,{children:"quote"}),", ",(0,t.jsx)(n.code,{children:"MRENCLAVE"}),", and ",(0,t.jsx)(n.code,{children:"MRSIGNER"})," values:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Get quote\ncat ~/.config/raiko/config/bootstrap.json | jq -r '.quote'\n\n# Get MRENCLAVE and MRSIGNER\ncat ~/.config/raiko/config/bootstrap.json | jq -r '.quote' | xxd -r -p > quote.bin\ngramine-sgx-quote-view quote.bin\n"})}),"\n",(0,t.jsx)(n.p,{children:"The output will contain important measurement values including:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["MRENCLAVE: ",(0,t.jsx)(n.code,{children:"14c4362d5dd0af9721ef9bdea2c92bf84b67fe34a102c892182ce2be7a81f2c5"})]}),"\n",(0,t.jsxs)(n.li,{children:["MRSIGNER: ",(0,t.jsx)(n.code,{children:"ca0583a715534a8c981b914589a7f0dc5d60959d9ae79fb5353299a4231673d5"})]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"4-register-collaterals",children:"4. Register Collaterals"}),"\n",(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.code,{children:"config_dcap_sgx_verifier.sh"})," or the script below to register the collaterals and the instance. For more information, see the following:"]}),"\n",(0,t.jsxs)(r,{children:[(0,t.jsx)(n.h3,{id:"set-environment-variables",children:"Set Environment Variables"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'export FOUNDRY_PROFILE=layer1\nexport MR_ENCLAVE=14c4362d5dd0af9721ef9bdea2c92bf84b67fe34a102c892182ce2be7a81f2c5\nexport MR_SIGNER=ca0583a715534a8c981b914589a7f0dc5d60959d9ae79fb5353299a4231673d5\nexport QEID_PATH="/test/qe_identity"\nexport TCB_INFO_PATH="/test/tcb"\nexport V3_QUOTE_BYTES=${Quote}\nexport SGX_VERIFIER_ADDRESS=0x86A0679C7987B5BA9600affA994B78D0660088ff\nexport ATTESTATION_ADDRESS=0xdFb2fAc1519eDA2b3ee1Edf578ee0509DC8633f7\nexport PEM_CERTCHAIN_ADDRESS=0x86B28E406738f2928bE33D111A0B821BBC5610A2\nexport FMSPC=00906ED50000\n'})}),(0,t.jsx)(n.h3,{id:"sgx-tcb-setup-script",children:"SGX TCB Setup Script"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'docker run \\\n -e TASK_ENABLE="[1,1,1,1,1,1]" \\\n -e MR_ENCLAVE=${MR_ENCLAVE} \\\n -e MR_SIGNER=${MR_SIGNER} \\\n -e QEID_PATH=${QEID_PATH} \\\n -e TCB_INFO_PATH=${TCB_INFO_PATH} \\\n -e V3_QUOTE_BYTES=${V3_QUOTE_BYTES} \\\n -e SGX_VERIFIER_ADDRESS=${SGX_VERIFIER_ADDRESS} \\\n -e ATTESTATION_ADDRESS=${ATTESTATION_ADDRESS} \\\n -e PEM_CERTCHAIN_ADDRESS=${PEM_CERTCHAIN_ADDRESS} \\\n -e FMSPC=${FMSPC} \\\n -e TCB_FILE=${TCB_FILE} \\\n -e QE_IDENTITY_FILE=${QE_IDENTITY_FILE} \\\n -e PRIVATE_KEY=${PRIVATE_KEY} \\\n nethsurge/taiko-contract:surge-devnet \\\n sh -c \'curl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/tcb?fmspc=${FMSPC}" > ${TCB_FILE} && \\\n curl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/qe/identity" > ${QE_IDENTITY_FILE} && \\\n jq ".tcbInfo.fmspc |= ascii_downcase" ${TCB_FILE} > temp.json && \\\n mv temp.json ${TCB_FILE} && \\\n forge script ./script/layer1/SetDcapParams.s.sol:SetDcapParams \\\n --private-key ${PRIVATE_KEY} \\\n --fork-url ${L1_RPC_URL} \\\n --broadcast --evm-version cancun --ffi -vvvv --block-gas-limit 100000000 --legacy\'\n'})})]}),"\n",(0,t.jsx)(n.h3,{id:"5-configure-and-run-raiko",children:"5. Configure and Run Raiko"}),"\n",(0,t.jsx)(n.p,{children:"Set up the following environment variables:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export SGX_INSTANCE_ID=0\nexport L1_NETWORK=surge_dev_l1\nexport NETWORK=surge_dev\nexport SGX_VERIFIER_ADDRESS=0x86A0679C7987B5BA9600affA994B78D0660088ff\nexport ATTESTATION_ADDRESS=0xdFb2fAc1519eDA2b3ee1Edf578ee0509DC8633f7\nexport PEM_CERTCHAIN_ADDRESS=0x86B28E406738f2928bE33D111A0B821BBC5610A2\nexport PROVER_PRIVATE_KEY=0x53321db7c1e331d93a11a41d16f004d7ff63972ec8ec7c25db329728ceeb1710\nexport PRIVATE_KEY=0x53321db7c1e331d93a11a41d16f004d7ff63972ec8ec7c25db329728ceeb1710\nexport FORK_URL=https://placeholder:32002\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Then run Raiko following the configuration instructions in the ",(0,t.jsx)(n.a,{href:"https://github.com/NethermindEth/raiko/blob/main/docs/README_Docker_and_RA.md#running-raiko",children:"Raiko Docker and RA Documentation"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>a});var t=r(6540);const i={},s=t.createContext(i);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[905],{2312:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var t=r(4848),i=r(8453);const s={sidebar_position:1},o="Deploy SGX Prover",a={id:"Guides/provers/sgx-prover",title:"Deploy SGX Prover",description:"Prerequisites",source:"@site/docs/Guides/provers/sgx-prover.mdx",sourceDirName:"Guides/provers",slug:"/Guides/provers/sgx-prover",permalink:"/docs/Guides/provers/sgx-prover",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/provers/sgx-prover.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Set up a Prover",permalink:"/docs/Guides/provers/"},next:{title:"Deploy RISC0 Prover",permalink:"/docs/Guides/provers/risc0-prover"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:3},{value:"1. Fetch Collateral Information",id:"1-fetch-collateral-information",level:3},{value:"2. Build and Initialize Image",id:"2-build-and-initialize-image",level:3},{value:"3. Get Quote and Measurement Values",id:"3-get-quote-and-measurement-values",level:3},{value:"4. Register Collaterals",id:"4-register-collaterals",level:3},{value:"Set Environment Variables",id:"set-environment-variables",level:3},{value:"SGX TCB Setup Script",id:"sgx-tcb-setup-script",level:3},{value:"5. Configure and Run Raiko",id:"5-configure-and-run-raiko",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components},{Details:r}=n;return r||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deploy-sgx-prover",children:"Deploy SGX Prover"})}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Machine with SGX support"}),"\n",(0,t.jsx)(n.li,{children:"L1 Accounts with funds (One for the Prover, One for Prover Registry)"}),"\n",(0,t.jsx)(n.li,{children:"L1 RPC URL"}),"\n",(0,t.jsx)(n.li,{children:"L1 Account Private Key"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"1-fetch-collateral-information",children:"1. Fetch Collateral Information"}),"\n",(0,t.jsx)(n.p,{children:"First, fetch the collateral information from Intel:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'FMSPC="00906ED50000"\n\nTCB_FILE="tcb.json"\nQE_IDENTITY_FILE="qe_identity.json"\n\ncurl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/tcb?fmspc=${FMSPC}" > ${TCB_FILE}\ncurl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/qe/identity" > ${QE_IDENTITY_FILE}\n\njq \'.tcbInfo.fmspc |= ascii_downcase\' ${TCB_FILE} > temp.json && mv temp.json ${TCB_FILE}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"2-build-and-initialize-image",children:"2. Build and Initialize Image"}),"\n",(0,t.jsxs)(n.p,{children:["Follow the instructions at ",(0,t.jsx)(n.a,{href:"https://github.com/NethermindEth/raiko/blob/main/docs/README_Docker_and_RA.md",children:"Raiko Docker and RA Documentation"})," to build and initialize the image."]}),"\n",(0,t.jsx)(n.h3,{id:"3-get-quote-and-measurement-values",children:"3. Get Quote and Measurement Values"}),"\n",(0,t.jsxs)(n.p,{children:["Retrieve the ",(0,t.jsx)(n.code,{children:"quote"}),", ",(0,t.jsx)(n.code,{children:"MRENCLAVE"}),", and ",(0,t.jsx)(n.code,{children:"MRSIGNER"})," values:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Get quote\ncat ~/.config/raiko/config/bootstrap.json | jq -r '.quote'\n\n# Get MRENCLAVE and MRSIGNER\ncat ~/.config/raiko/config/bootstrap.json | jq -r '.quote' | xxd -r -p > quote.bin\ngramine-sgx-quote-view quote.bin\n"})}),"\n",(0,t.jsx)(n.p,{children:"The output will contain important measurement values including:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["MRENCLAVE: ",(0,t.jsx)(n.code,{children:"14c4362d5dd0af9721ef9bdea2c92bf84b67fe34a102c892182ce2be7a81f2c5"})]}),"\n",(0,t.jsxs)(n.li,{children:["MRSIGNER: ",(0,t.jsx)(n.code,{children:"ca0583a715534a8c981b914589a7f0dc5d60959d9ae79fb5353299a4231673d5"})]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"4-register-collaterals",children:"4. Register Collaterals"}),"\n",(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.code,{children:"config_dcap_sgx_verifier.sh"})," or the script below to register the collaterals and the instance. For more information, see the following:"]}),"\n",(0,t.jsxs)(r,{children:[(0,t.jsx)(n.h3,{id:"set-environment-variables",children:"Set Environment Variables"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'export FOUNDRY_PROFILE=layer1\nexport MR_ENCLAVE=14c4362d5dd0af9721ef9bdea2c92bf84b67fe34a102c892182ce2be7a81f2c5\nexport MR_SIGNER=ca0583a715534a8c981b914589a7f0dc5d60959d9ae79fb5353299a4231673d5\nexport QEID_PATH="/test/qe_identity"\nexport TCB_INFO_PATH="/test/tcb"\nexport V3_QUOTE_BYTES=${Quote}\nexport SGX_VERIFIER_ADDRESS=0x86A0679C7987B5BA9600affA994B78D0660088ff\nexport ATTESTATION_ADDRESS=0xdFb2fAc1519eDA2b3ee1Edf578ee0509DC8633f7\nexport PEM_CERTCHAIN_ADDRESS=0x86B28E406738f2928bE33D111A0B821BBC5610A2\nexport FMSPC=00906ED50000\n'})}),(0,t.jsx)(n.h3,{id:"sgx-tcb-setup-script",children:"SGX TCB Setup Script"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'docker run \\\n -e TASK_ENABLE="[1,1,1,1,1,1]" \\\n -e MR_ENCLAVE=${MR_ENCLAVE} \\\n -e MR_SIGNER=${MR_SIGNER} \\\n -e QEID_PATH=${QEID_PATH} \\\n -e TCB_INFO_PATH=${TCB_INFO_PATH} \\\n -e V3_QUOTE_BYTES=${V3_QUOTE_BYTES} \\\n -e SGX_VERIFIER_ADDRESS=${SGX_VERIFIER_ADDRESS} \\\n -e ATTESTATION_ADDRESS=${ATTESTATION_ADDRESS} \\\n -e PEM_CERTCHAIN_ADDRESS=${PEM_CERTCHAIN_ADDRESS} \\\n -e FMSPC=${FMSPC} \\\n -e TCB_FILE=${TCB_FILE} \\\n -e QE_IDENTITY_FILE=${QE_IDENTITY_FILE} \\\n -e PRIVATE_KEY=${PRIVATE_KEY} \\\n nethsurge/taiko-contract:surge-devnet \\\n sh -c \'curl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/tcb?fmspc=${FMSPC}" > ${TCB_FILE} && \\\n curl -X GET "https://api.trustedservices.intel.com/sgx/certification/v3/qe/identity" > ${QE_IDENTITY_FILE} && \\\n jq ".tcbInfo.fmspc |= ascii_downcase" ${TCB_FILE} > temp.json && \\\n mv temp.json ${TCB_FILE} && \\\n forge script ./script/layer1/SetDcapParams.s.sol:SetDcapParams \\\n --private-key ${PRIVATE_KEY} \\\n --fork-url ${L1_RPC_URL} \\\n --broadcast --evm-version cancun --ffi -vvvv --block-gas-limit 100000000 --legacy\'\n'})})]}),"\n",(0,t.jsx)(n.h3,{id:"5-configure-and-run-raiko",children:"5. Configure and Run Raiko"}),"\n",(0,t.jsx)(n.p,{children:"Set up the following environment variables:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export SGX_INSTANCE_ID=0\nexport L1_NETWORK=surge_dev_l1\nexport NETWORK=surge_dev\nexport SGX_VERIFIER_ADDRESS=0x86A0679C7987B5BA9600affA994B78D0660088ff\nexport ATTESTATION_ADDRESS=0xdFb2fAc1519eDA2b3ee1Edf578ee0509DC8633f7\nexport PEM_CERTCHAIN_ADDRESS=0x86B28E406738f2928bE33D111A0B821BBC5610A2\nexport PROVER_PRIVATE_KEY=0x53321db7c1e331d93a11a41d16f004d7ff63972ec8ec7c25db329728ceeb1710\nexport PRIVATE_KEY=0x53321db7c1e331d93a11a41d16f004d7ff63972ec8ec7c25db329728ceeb1710\nexport FORK_URL=https://placeholder:32002\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Then run Raiko following the configuration instructions in the ",(0,t.jsx)(n.a,{href:"https://github.com/NethermindEth/raiko/blob/main/docs/README_Docker_and_RA.md#running-raiko",children:"Raiko Docker and RA Documentation"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>a});var t=r(6540);const i={},s=t.createContext(i);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d58cd8b1.3a6e21bc.js b/assets/js/d58cd8b1.ed4ec15f.js similarity index 99% rename from assets/js/d58cd8b1.3a6e21bc.js rename to assets/js/d58cd8b1.ed4ec15f.js index 8e2e017..120d8e7 100644 --- a/assets/js/d58cd8b1.3a6e21bc.js +++ b/assets/js/d58cd8b1.ed4ec15f.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[906],{1373:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var t=r(4848),i=r(8453),s=r(1470),l=r(9365);const a={sidebar_position:4},o="Deploy Protocols on L2",c={id:"Guides/deploy-l2-protocols",title:"Deploy Protocols on L2",description:"This guide explains how to deploy and configure the bridge and signal service protocols on L2.",source:"@site/docs/Guides/deploy-l2-protocols.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-l2-protocols",permalink:"/docs/Guides/deploy-l2-protocols",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-l2-protocols.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Deploy L2",permalink:"/docs/Guides/deploy-l2"},next:{title:"Deploy Relayer",permalink:"/docs/Guides/deploy-relay"}},d={},u=[{value:"Bridge Configuration",id:"bridge-configuration",level:3},{value:"Prerequisites",id:"prerequisites",level:4},{value:"Set Environment Variables",id:"set-environment-variables",level:3},{value:"Bridge Setup Script",id:"bridge-setup-script",level:3},{value:"Signal Service Configuration",id:"signal-service-configuration",level:3},{value:"Prerequisites",id:"prerequisites-1",level:4},{value:"Set Environment Variables",id:"set-environment-variables-1",level:3},{value:"Signal Service Setup Script",id:"signal-service-setup-script",level:3},{value:"Verification Steps",id:"verification-steps",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deploy-protocols-on-l2",children:"Deploy Protocols on L2"})}),"\n",(0,t.jsx)(n.p,{children:"This guide explains how to deploy and configure the bridge and signal service protocols on L2."}),"\n",(0,t.jsxs)(s.A,{children:[(0,t.jsxs)(l.A,{value:"bridge",label:"1. Configure Bridge",default:!0,children:[(0,t.jsx)(n.h3,{id:"bridge-configuration",children:"Bridge Configuration"}),(0,t.jsx)(n.h4,{id:"prerequisites",children:"Prerequisites"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L1 Chain ID (3151908)"}),"\n",(0,t.jsxs)(n.li,{children:["L1_BRIDGE: ",(0,t.jsx)(n.code,{children:"0x72bCbB3f339aF622c28a26488Eed9097a2977404"})]}),"\n",(0,t.jsxs)(n.li,{children:["L2_SHARED_ADDRESS_MANAGER: ",(0,t.jsx)(n.code,{children:"0x7633740000000000000000000000000000000006"})]}),"\n",(0,t.jsx)(n.li,{children:"L2 Prefunded Account private key"}),"\n",(0,t.jsx)(n.li,{children:"L2 RPC URL"}),"\n"]}),(0,t.jsx)(n.h3,{id:"set-environment-variables",children:"Set Environment Variables"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export FOUNDRY_PROFILE=layer1\nexport DOMAIN=3151908\nexport ADDRESS=0x72bCbB3f339aF622c28a26488Eed9097a2977404\nexport NAME=0x6272696467650000000000000000000000000000000000000000000000000000\nexport PROXY_ADDRESS=0x7633740000000000000000000000000000000006\nexport PRIVATE_KEY=0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\nexport L2_RPC_URL=https://placeholder:8547\n"})}),(0,t.jsx)(n.h3,{id:"bridge-setup-script",children:"Bridge Setup Script"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n-e FOUNDRY_PROFILE=${FOUNDRY_PROFILE} \\\n-e DOMAIN=${DOMAIN} \\\n-e ADDRESS=${ADDRESS} \\\n-e NAME=${NAME} \\\n-e PROXY_ADDRESS=${PROXY_ADDRESS} \\\n-e PRIVATE_KEY=${PRIVATE_KEY} \\\nnethsurge/taiko-contract:surge-devnet \\\nforge script ./script/shared/SetAddress.s.sol \\\n--private-key ${PRIVATE_KEY} \\\n--fork-url ${L2_RPC_URL} \\\n--broadcast -vvv\n"})})]}),(0,t.jsxs)(l.A,{value:"signal",label:"2. Configure Signal Service",children:[(0,t.jsx)(n.h3,{id:"signal-service-configuration",children:"Signal Service Configuration"}),(0,t.jsx)(n.h4,{id:"prerequisites-1",children:"Prerequisites"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L1 Chain ID (3151908)"}),"\n",(0,t.jsxs)(n.li,{children:["L1_SIGNAL_SERVICE: ",(0,t.jsx)(n.code,{children:"0x00c042C4D5D913277CE16611a2ce6e9003554aD5"})]}),"\n",(0,t.jsxs)(n.li,{children:["L2_SHARED_ADDRESS_MANAGER: ",(0,t.jsx)(n.code,{children:"0x7633740000000000000000000000000000000006"})]}),"\n",(0,t.jsx)(n.li,{children:"L2 Prefunded Account private key"}),"\n",(0,t.jsx)(n.li,{children:"L2 RPC URL"}),"\n"]}),(0,t.jsx)(n.h3,{id:"set-environment-variables-1",children:"Set Environment Variables"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export FOUNDRY_PROFILE=layer1\nexport DOMAIN=3151908\nexport ADDRESS=0x00c042C4D5D913277CE16611a2ce6e9003554aD5\nexport NAME=0x7369676e616c5f73657276696365000000000000000000000000000000000000\nexport PROXY_ADDRESS=0x7633740000000000000000000000000000000006\nexport PRIVATE_KEY=0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\nexport L2_RPC_URL=https://placeholder:8547\n"})}),(0,t.jsx)(n.h3,{id:"signal-service-setup-script",children:"Signal Service Setup Script"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n-e FOUNDRY_PROFILE=${FOUNDRY_PROFILE} \\\n-e DOMAIN=${DOMAIN} \\\n-e ADDRESS=${ADDRESS} \\\n-e NAME=${NAME} \\\n-e PROXY_ADDRESS=${PROXY_ADDRESS} \\\n-e PRIVATE_KEY=${PRIVATE_KEY} \\\nnethsurge/taiko-contract:surge-devnet \\\nforge script ./script/shared/SetAddress.s.sol \\\n--private-key ${PRIVATE_KEY} \\\n--fork-url ${L2_RPC_URL} \\\n--broadcast -vvv\n"})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"verification-steps",children:"Verification Steps"}),"\n",(0,t.jsx)(n.p,{children:"After deploying both protocols:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Verify Bridge Setup"}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Confirm the bridge address is correctly set"}),"\n",(0,t.jsx)(n.li,{children:"Check transaction confirmation on L2"}),"\n",(0,t.jsx)(n.li,{children:"Verify the bridge contract is accessible"}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsx)(n.li,{children:"Verify Signal Service Setup"}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Confirm the signal service address is correctly set"}),"\n",(0,t.jsx)(n.li,{children:"Check transaction confirmation on L2"}),"\n",(0,t.jsx)(n.li,{children:"Verify the signal service contract is accessible"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Important Note",type:"warning",children:(0,t.jsx)(n.p,{children:"Ensure you have sufficient funds in your L2 account before deploying these protocols, as each transaction will require gas fees."})}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(n.p,{children:"If you encounter issues during deployment:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Check Connectivity"}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Verify L2 RPC endpoint is accessible"}),"\n",(0,t.jsx)(n.li,{children:"Ensure network connectivity is stable"}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsx)(n.li,{children:"Account Issues"}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Confirm account has sufficient funds"}),"\n",(0,t.jsx)(n.li,{children:"Verify private key is correct"}),"\n",(0,t.jsx)(n.li,{children:"Check account permissions"}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsx)(n.li,{children:"Contract Interactions"}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Verify contract addresses are correct"}),"\n",(0,t.jsx)(n.li,{children:"Check that ABI matches the deployed contracts"}),"\n",(0,t.jsx)(n.li,{children:"Ensure gas limits are sufficient"}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},9365:(e,n,r)=>{r.d(n,{A:()=>l});r(6540);var t=r(4164);const i={tabItem:"tabItem_Ymn6"};var s=r(4848);function l(e){let{children:n,hidden:r,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,t.A)(i.tabItem,l),hidden:r,children:n})}},1470:(e,n,r)=>{r.d(n,{A:()=>S});var t=r(6540),i=r(4164),s=r(3104),l=r(6347),a=r(205),o=r(7485),c=r(1682),d=r(679);function u(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:i}}=e;return{value:n,label:r,attributes:t,default:i}}))}(r);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:r}=e;const i=(0,l.W6)(),s=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,o.aZ)(s),(0,t.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(i.location.search);n.set(s,e),i.replace({...i.location,search:n.toString()})}),[s,i])]}function x(e){const{defaultValue:n,queryString:r=!1,groupId:i}=e,s=h(e),[l,o]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:s}))),[c,u]=f({queryString:r,groupId:i}),[x,b]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,s]=(0,d.Dv)(r);return[i,(0,t.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:i}),v=(()=>{const e=c??x;return p({value:e,tabValues:s})?e:null})();(0,a.A)((()=>{v&&o(v)}),[v]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var b=r(2303);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(4848);function m(e){let{className:n,block:r,selectedValue:t,selectValue:l,tabValues:a}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),d=e=>{const n=e.currentTarget,r=o.indexOf(n),i=a[r].value;i!==t&&(c(n),l(i))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=o.indexOf(e.currentTarget)+1;n=o[r]??o[0];break}case"ArrowLeft":{const r=o.indexOf(e.currentTarget)-1;n=o[r]??o[o.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.A)("tabs",{"tabs--block":r},n),children:a.map((e=>{let{value:n,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>o.push(e),onKeyDown:u,onClick:d,...s,className:(0,i.A)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function j(e){let{lazy:n,children:r,selectedValue:s}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=l.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:(0,i.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function E(e){const n=x(e);return(0,g.jsxs)("div",{className:(0,i.A)("tabs-container",v.tabList),children:[(0,g.jsx)(m,{...n,...e}),(0,g.jsx)(j,{...n,...e})]})}function S(e){const n=(0,b.A)();return(0,g.jsx)(E,{...e,children:u(e.children)},String(n))}},8453:(e,n,r)=>{r.d(n,{R:()=>l,x:()=>a});var t=r(6540);const i={},s=t.createContext(i);function l(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[906],{1373:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var t=r(4848),i=r(8453),s=r(1470),l=r(9365);const a={sidebar_position:4},o="Deploy Protocols on L2",c={id:"Guides/deploy-l2-protocols",title:"Deploy Protocols on L2",description:"This guide explains how to deploy and configure the bridge and signal service protocols on L2.",source:"@site/docs/Guides/deploy-l2-protocols.mdx",sourceDirName:"Guides",slug:"/Guides/deploy-l2-protocols",permalink:"/docs/Guides/deploy-l2-protocols",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/Guides/deploy-l2-protocols.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Deploy L2",permalink:"/docs/Guides/deploy-l2"},next:{title:"Deploy Relayer",permalink:"/docs/Guides/deploy-relay"}},d={},u=[{value:"Bridge Configuration",id:"bridge-configuration",level:3},{value:"Prerequisites",id:"prerequisites",level:4},{value:"Set Environment Variables",id:"set-environment-variables",level:3},{value:"Bridge Setup Script",id:"bridge-setup-script",level:3},{value:"Signal Service Configuration",id:"signal-service-configuration",level:3},{value:"Prerequisites",id:"prerequisites-1",level:4},{value:"Set Environment Variables",id:"set-environment-variables-1",level:3},{value:"Signal Service Setup Script",id:"signal-service-setup-script",level:3},{value:"Verification Steps",id:"verification-steps",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"deploy-protocols-on-l2",children:"Deploy Protocols on L2"})}),"\n",(0,t.jsx)(n.p,{children:"This guide explains how to deploy and configure the bridge and signal service protocols on L2."}),"\n",(0,t.jsxs)(s.A,{children:[(0,t.jsxs)(l.A,{value:"bridge",label:"1. Configure Bridge",default:!0,children:[(0,t.jsx)(n.h3,{id:"bridge-configuration",children:"Bridge Configuration"}),(0,t.jsx)(n.h4,{id:"prerequisites",children:"Prerequisites"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L1 Chain ID (3151908)"}),"\n",(0,t.jsxs)(n.li,{children:["L1_BRIDGE: ",(0,t.jsx)(n.code,{children:"0x72bCbB3f339aF622c28a26488Eed9097a2977404"})]}),"\n",(0,t.jsxs)(n.li,{children:["L2_SHARED_ADDRESS_MANAGER: ",(0,t.jsx)(n.code,{children:"0x7633740000000000000000000000000000000006"})]}),"\n",(0,t.jsx)(n.li,{children:"L2 Prefunded Account private key"}),"\n",(0,t.jsx)(n.li,{children:"L2 RPC URL"}),"\n"]}),(0,t.jsx)(n.h3,{id:"set-environment-variables",children:"Set Environment Variables"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export FOUNDRY_PROFILE=layer1\nexport DOMAIN=3151908\nexport ADDRESS=0x72bCbB3f339aF622c28a26488Eed9097a2977404\nexport NAME=0x6272696467650000000000000000000000000000000000000000000000000000\nexport PROXY_ADDRESS=0x7633740000000000000000000000000000000006\nexport PRIVATE_KEY=0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\nexport L2_RPC_URL=https://placeholder:8547\n"})}),(0,t.jsx)(n.h3,{id:"bridge-setup-script",children:"Bridge Setup Script"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n-e FOUNDRY_PROFILE=${FOUNDRY_PROFILE} \\\n-e DOMAIN=${DOMAIN} \\\n-e ADDRESS=${ADDRESS} \\\n-e NAME=${NAME} \\\n-e PROXY_ADDRESS=${PROXY_ADDRESS} \\\n-e PRIVATE_KEY=${PRIVATE_KEY} \\\nnethsurge/taiko-contract:surge-devnet \\\nforge script ./script/shared/SetAddress.s.sol \\\n--private-key ${PRIVATE_KEY} \\\n--fork-url ${L2_RPC_URL} \\\n--broadcast -vvv\n"})})]}),(0,t.jsxs)(l.A,{value:"signal",label:"2. Configure Signal Service",children:[(0,t.jsx)(n.h3,{id:"signal-service-configuration",children:"Signal Service Configuration"}),(0,t.jsx)(n.h4,{id:"prerequisites-1",children:"Prerequisites"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L1 Chain ID (3151908)"}),"\n",(0,t.jsxs)(n.li,{children:["L1_SIGNAL_SERVICE: ",(0,t.jsx)(n.code,{children:"0x00c042C4D5D913277CE16611a2ce6e9003554aD5"})]}),"\n",(0,t.jsxs)(n.li,{children:["L2_SHARED_ADDRESS_MANAGER: ",(0,t.jsx)(n.code,{children:"0x7633740000000000000000000000000000000006"})]}),"\n",(0,t.jsx)(n.li,{children:"L2 Prefunded Account private key"}),"\n",(0,t.jsx)(n.li,{children:"L2 RPC URL"}),"\n"]}),(0,t.jsx)(n.h3,{id:"set-environment-variables-1",children:"Set Environment Variables"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"export FOUNDRY_PROFILE=layer1\nexport DOMAIN=3151908\nexport ADDRESS=0x00c042C4D5D913277CE16611a2ce6e9003554aD5\nexport NAME=0x7369676e616c5f73657276696365000000000000000000000000000000000000\nexport PROXY_ADDRESS=0x7633740000000000000000000000000000000006\nexport PRIVATE_KEY=0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\nexport L2_RPC_URL=https://placeholder:8547\n"})}),(0,t.jsx)(n.h3,{id:"signal-service-setup-script",children:"Signal Service Setup Script"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n-e FOUNDRY_PROFILE=${FOUNDRY_PROFILE} \\\n-e DOMAIN=${DOMAIN} \\\n-e ADDRESS=${ADDRESS} \\\n-e NAME=${NAME} \\\n-e PROXY_ADDRESS=${PROXY_ADDRESS} \\\n-e PRIVATE_KEY=${PRIVATE_KEY} \\\nnethsurge/taiko-contract:surge-devnet \\\nforge script ./script/shared/SetAddress.s.sol \\\n--private-key ${PRIVATE_KEY} \\\n--fork-url ${L2_RPC_URL} \\\n--broadcast -vvv\n"})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"verification-steps",children:"Verification Steps"}),"\n",(0,t.jsx)(n.p,{children:"After deploying both protocols:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Verify Bridge Setup"}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Confirm the bridge address is correctly set"}),"\n",(0,t.jsx)(n.li,{children:"Check transaction confirmation on L2"}),"\n",(0,t.jsx)(n.li,{children:"Verify the bridge contract is accessible"}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsx)(n.li,{children:"Verify Signal Service Setup"}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Confirm the signal service address is correctly set"}),"\n",(0,t.jsx)(n.li,{children:"Check transaction confirmation on L2"}),"\n",(0,t.jsx)(n.li,{children:"Verify the signal service contract is accessible"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Important Note",type:"warning",children:(0,t.jsx)(n.p,{children:"Ensure you have sufficient funds in your L2 account before deploying these protocols, as each transaction will require gas fees."})}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(n.p,{children:"If you encounter issues during deployment:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Check Connectivity"}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Verify L2 RPC endpoint is accessible"}),"\n",(0,t.jsx)(n.li,{children:"Ensure network connectivity is stable"}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsx)(n.li,{children:"Account Issues"}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Confirm account has sufficient funds"}),"\n",(0,t.jsx)(n.li,{children:"Verify private key is correct"}),"\n",(0,t.jsx)(n.li,{children:"Check account permissions"}),"\n"]}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsx)(n.li,{children:"Contract Interactions"}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Verify contract addresses are correct"}),"\n",(0,t.jsx)(n.li,{children:"Check that ABI matches the deployed contracts"}),"\n",(0,t.jsx)(n.li,{children:"Ensure gas limits are sufficient"}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},9365:(e,n,r)=>{r.d(n,{A:()=>l});r(6540);var t=r(4164);const i={tabItem:"tabItem_Ymn6"};var s=r(4848);function l(e){let{children:n,hidden:r,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,t.A)(i.tabItem,l),hidden:r,children:n})}},1470:(e,n,r)=>{r.d(n,{A:()=>S});var t=r(6540),i=r(4164),s=r(3104),l=r(6347),a=r(205),o=r(7485),c=r(1682),d=r(679);function u(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:i}}=e;return{value:n,label:r,attributes:t,default:i}}))}(r);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:r}=e;const i=(0,l.W6)(),s=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,o.aZ)(s),(0,t.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(i.location.search);n.set(s,e),i.replace({...i.location,search:n.toString()})}),[s,i])]}function x(e){const{defaultValue:n,queryString:r=!1,groupId:i}=e,s=h(e),[l,o]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:s}))),[c,u]=f({queryString:r,groupId:i}),[x,b]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,s]=(0,d.Dv)(r);return[i,(0,t.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:i}),v=(()=>{const e=c??x;return p({value:e,tabValues:s})?e:null})();(0,a.A)((()=>{v&&o(v)}),[v]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var b=r(2303);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(4848);function m(e){let{className:n,block:r,selectedValue:t,selectValue:l,tabValues:a}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),d=e=>{const n=e.currentTarget,r=o.indexOf(n),i=a[r].value;i!==t&&(c(n),l(i))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=o.indexOf(e.currentTarget)+1;n=o[r]??o[0];break}case"ArrowLeft":{const r=o.indexOf(e.currentTarget)-1;n=o[r]??o[o.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.A)("tabs",{"tabs--block":r},n),children:a.map((e=>{let{value:n,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>o.push(e),onKeyDown:u,onClick:d,...s,className:(0,i.A)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function j(e){let{lazy:n,children:r,selectedValue:s}=e;const l=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=l.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:(0,i.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function E(e){const n=x(e);return(0,g.jsxs)("div",{className:(0,i.A)("tabs-container",v.tabList),children:[(0,g.jsx)(m,{...n,...e}),(0,g.jsx)(j,{...n,...e})]})}function S(e){const n=(0,b.A)();return(0,g.jsx)(E,{...e,children:u(e.children)},String(n))}},8453:(e,n,r)=>{r.d(n,{R:()=>l,x:()=>a});var t=r(6540);const i={},s=t.createContext(i);function l(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/da6537e0.8a2aa45d.js b/assets/js/da6537e0.5b94336d.js similarity index 97% rename from assets/js/da6537e0.8a2aa45d.js rename to assets/js/da6537e0.5b94336d.js index 9e3cae8..bbf56e3 100644 --- a/assets/js/da6537e0.8a2aa45d.js +++ b/assets/js/da6537e0.5b94336d.js @@ -1 +1 @@ -"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[700],{7171:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var o=n(4848),c=n(8453);const r={sidebar_position:3},s="Core Concepts",i={id:"core-concepts/index",title:"Core Concepts",description:"Deep dive into Surge's fundamental concepts and architecture.",source:"@site/docs/core-concepts/index.mdx",sourceDirName:"core-concepts",slug:"/core-concepts/",permalink:"/docs/core-concepts/",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/core-concepts/index.mdx",tags:[],version:"current",lastUpdatedAt:1737529752e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Getting Started",permalink:"/docs/getting-started"},next:{title:"Bridging",permalink:"/docs/core-concepts/bridging"}},d={},l=[{value:"Topics",id:"topics",level:2}];function a(e){const t={h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,c.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"core-concepts",children:"Core Concepts"})}),"\n",(0,o.jsx)(t.p,{children:"Deep dive into Surge's fundamental concepts and architecture."}),"\n",(0,o.jsx)(t.h2,{id:"topics",children:"Topics"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"zkEVM Implementation"}),"\n",(0,o.jsx)(t.li,{children:"Block Production"}),"\n",(0,o.jsx)(t.li,{children:"Cross-layer Composability"}),"\n",(0,o.jsx)(t.li,{children:"Security Model"}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"(Placeholder for core concepts content)"})]})}function p(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var o=n(6540);const c={},r=o.createContext(c);function s(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[700],{7171:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var o=n(4848),c=n(8453);const r={sidebar_position:3},s="Core Concepts",i={id:"core-concepts/index",title:"Core Concepts",description:"Deep dive into Surge's fundamental concepts and architecture.",source:"@site/docs/core-concepts/index.mdx",sourceDirName:"core-concepts",slug:"/core-concepts/",permalink:"/docs/core-concepts/",draft:!1,unlisted:!1,editUrl:"https://github.com/NethermindEth/surge/tree/main/docs/docs/core-concepts/index.mdx",tags:[],version:"current",lastUpdatedAt:1737546122e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Getting Started",permalink:"/docs/getting-started"},next:{title:"Bridging",permalink:"/docs/core-concepts/bridging"}},d={},l=[{value:"Topics",id:"topics",level:2}];function a(e){const t={h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,c.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"core-concepts",children:"Core Concepts"})}),"\n",(0,o.jsx)(t.p,{children:"Deep dive into Surge's fundamental concepts and architecture."}),"\n",(0,o.jsx)(t.h2,{id:"topics",children:"Topics"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"zkEVM Implementation"}),"\n",(0,o.jsx)(t.li,{children:"Block Production"}),"\n",(0,o.jsx)(t.li,{children:"Cross-layer Composability"}),"\n",(0,o.jsx)(t.li,{children:"Security Model"}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"(Placeholder for core concepts content)"})]})}function p(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var o=n(6540);const c={},r=o.createContext(c);function s(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.0254d61f.js b/assets/js/main.b25b22bf.js similarity index 99% rename from assets/js/main.0254d61f.js rename to assets/js/main.b25b22bf.js index 74be014..c2575ae 100644 --- a/assets/js/main.0254d61f.js +++ b/assets/js/main.b25b22bf.js @@ -1,2 +1,2 @@ -/*! For license information please see main.0254d61f.js.LICENSE.txt */ -(self.webpackChunksurge_docs=self.webpackChunksurge_docs||[]).push([[792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),o=n.n(r),a=n(4054);const i={"0058b4c6":[()=>n.e(849).then(n.t.bind(n,6164,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-175.json",6164],"01900813":[()=>n.e(77).then(n.bind(n,9893)),"@site/docs/core-concepts/sequencing.mdx",9893],"0cff9a71":[()=>n.e(154).then(n.bind(n,4456)),"@site/docs/Guides/provers/sp1-prover.mdx",4456],"0e384e19":[()=>n.e(976).then(n.bind(n,619)),"@site/docs/intro.md",619],17896441:[()=>Promise.all([n.e(869),n.e(408),n.e(401)]).then(n.bind(n,6795)),"@theme/DocItem",6795],"1df93b7f":[()=>Promise.all([n.e(315),n.e(583)]).then(n.bind(n,6866)),"@site/src/pages/index.tsx",6866],"1f391b9e":[()=>Promise.all([n.e(869),n.e(408),n.e(61)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],"25fd459b":[()=>n.e(14).then(n.bind(n,3136)),"@site/docs/Troubleshooting/index.mdx",3136],"2dd7e07d":[()=>Promise.all([n.e(869),n.e(688)]).then(n.bind(n,8162)),"@site/docs/Guides/deploy-l1-protocols.mdx",8162],"3021cf83":[()=>n.e(857).then(n.bind(n,5251)),"@site/docs/getting-started.mdx",5251],"393be207":[()=>n.e(134).then(n.bind(n,633)),"@site/src/pages/markdown-page.md",633],"43c4bd28":[()=>n.e(481).then(n.bind(n,3091)),"@site/docs/Troubleshooting/error-codes.mdx",3091],"4848ee62":[()=>n.e(185).then(n.bind(n,986)),"@site/docs/Guides/deploy-l1.mdx",986],"5e95c892":[()=>n.e(647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"6925427d":[()=>Promise.all([n.e(869),n.e(220)]).then(n.bind(n,6311)),"@site/docs/Guides/deploy-relay.mdx",6311],"70229f88":[()=>n.e(899).then(n.bind(n,9131)),"@site/docs/Guides/provers/index.mdx",9131],"7bab19c9":[()=>Promise.all([n.e(869),n.e(599)]).then(n.bind(n,3693)),"@site/docs/Guides/deploy-bridge-ui.mdx",3693],"995c0dc6":[()=>n.e(502).then(n.bind(n,2487)),"@site/docs/Guides/provers/risc0-prover.mdx",2487],"997f3e03":[()=>Promise.all([n.e(869),n.e(285)]).then(n.bind(n,9477)),"@site/docs/Guides/deploy-l2.mdx",9477],a7456010:[()=>n.e(235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7bd4aaa:[()=>n.e(98).then(n.bind(n,1723)),"@theme/DocVersionRoot",1723],a94703ab:[()=>Promise.all([n.e(869),n.e(48)]).then(n.bind(n,1377)),"@theme/DocRoot",1377],aba21aa0:[()=>n.e(742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],abff299a:[()=>n.e(99).then(n.bind(n,2400)),"@site/docs/Troubleshooting/common-issues.mdx",2400],ad528f71:[()=>n.e(11).then(n.bind(n,3404)),"@site/docs/core-concepts/proposing.mdx",3404],c60f1aa1:[()=>n.e(934).then(n.bind(n,7469)),"@site/docs/core-concepts/bridging.mdx",7469],cffb26af:[()=>n.e(905).then(n.bind(n,2312)),"@site/docs/Guides/provers/sgx-prover.mdx",2312],d58cd8b1:[()=>Promise.all([n.e(869),n.e(906)]).then(n.bind(n,1373)),"@site/docs/Guides/deploy-l2-protocols.mdx",1373],da6537e0:[()=>n.e(700).then(n.bind(n,7171)),"@site/docs/core-concepts/index.mdx",7171]};var l=n(4848);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("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%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("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",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(6921),c=n(3102);function d(e,t){if("*"===e)return o()({loading:s,loader:()=>n.e(237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,l.jsx)(c.W,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,u.A)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));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 i=o;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const s=o.__props;return delete o.__props,(0,l.jsx)(c.W,{value:i,children:(0,l.jsx)(a,{...o,...s,...n})})}})}const p=[{path:"/markdown-page",component:d("/markdown-page","3d7"),exact:!0},{path:"/docs",component:d("/docs","4a1"),routes:[{path:"/docs",component:d("/docs","d68"),routes:[{path:"/docs",component:d("/docs","7be"),routes:[{path:"/docs/core-concepts",component:d("/docs/core-concepts","7e1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/core-concepts/bridging",component:d("/docs/core-concepts/bridging","9b5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/core-concepts/proposing",component:d("/docs/core-concepts/proposing","be4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/core-concepts/sequencing",component:d("/docs/core-concepts/sequencing","23e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/getting-started",component:d("/docs/getting-started","ea2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Guides/deploy-bridge-ui",component:d("/docs/Guides/deploy-bridge-ui","170"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Guides/deploy-l1",component:d("/docs/Guides/deploy-l1","552"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Guides/deploy-l1-protocols",component:d("/docs/Guides/deploy-l1-protocols","92d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Guides/deploy-l2",component:d("/docs/Guides/deploy-l2","be6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Guides/deploy-l2-protocols",component:d("/docs/Guides/deploy-l2-protocols","146"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Guides/deploy-relay",component:d("/docs/Guides/deploy-relay","4a8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Guides/provers",component:d("/docs/Guides/provers","a01"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Guides/provers/risc0-prover",component:d("/docs/Guides/provers/risc0-prover","930"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Guides/provers/sgx-prover",component:d("/docs/Guides/provers/sgx-prover","e42"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Guides/provers/sp1-prover",component:d("/docs/Guides/provers/sp1-prover","17f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro",component:d("/docs/intro","36e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Troubleshooting",component:d("/docs/Troubleshooting","b0b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Troubleshooting/common-issues",component:d("/docs/Troubleshooting/common-issues","33c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Troubleshooting/error-codes",component:d("/docs/Troubleshooting/error-codes","a9e"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/",component:d("/","e5f"),exact:!0},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(6540),o=n(4848);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},7815:(e,t,n)=>{"use strict";var r=n(6540),o=n(5338),a=n(545),i=n(4625),l=n(4784),s=n(8193);const u=[n(119),n(6134),n(6294),n(1043)];var c=n(8328),d=n(6347),p=n(2831),f=n(4848);function m(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var h=n(5260),g=n(4586),y=n(6025),b=n(6342),v=n(1003),w=n(2131),k=n(4090);var x=n(440),S=n(1463);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.A)(),r=(0,w.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(h.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.A)(),{pathname:r}=(0,d.zy)();return e+(0,x.Ks)((0,y.Ay)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,f.jsxs)(h.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:o}),(0,f.jsx)("link",{rel:"canonical",href:o})]})}function C(){const{i18n:{currentLocale:e}}=(0,g.A)(),{metadata:t,image:n}=(0,b.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(h.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:k.w})]}),n&&(0,f.jsx)(v.be,{image:n}),(0,f.jsx)(_,{}),(0,f.jsx)(E,{}),(0,f.jsx)(S.A,{tag:"default",locale:e}),(0,f.jsx)(h.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const A=new Map;var T=n(6125),j=n(6988),N=n(205);function P(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()=>o.forEach((e=>e?.()))}const R=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,N.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)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:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(c.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.A.canUseDOM?P("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=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(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(0,f.jsx)(R,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const D=O,I="__docusaurus-base-url-issue-banner-suggestion-container";function F(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '__docusaurus-base-url-issue-banner-container';\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(/{let{route:t}=e;return!0===t.exact})))return A.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return A.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(D,{location:e,children:q})}function V(){return(0,f.jsx)($.A,{children:(0,f.jsx)(j.l,{children:(0,f.jsxs)(T.x,{children:[(0,f.jsxs)(m,{children:[(0,f.jsx)(B,{}),(0,f.jsx)(C,{}),(0,f.jsx)(z,{}),(0,f.jsx)(H,{})]}),(0,f.jsx)(G,{})]})})})}var W=n(4054);const Q=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 o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.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 K=n(6921);const Y=new Set,Z=new Set,X=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,J={prefetch:e=>{if(!(e=>!X()&&!Z.has(e)&&!Y.has(e))(e))return!1;Y.add(e);const t=(0,p.u)(c.A,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Q(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!X()&&!Z.has(e))(e)&&(Z.add(e),L(e))},ee=Object.freeze(J);function te(e){let{children:t}=e;return"hash"===l.default.future.experimental_router?(0,f.jsx)(i.I9,{children:t}):(0,f.jsx)(i.Kd,{children:t})}const ne=Boolean(!0);if(s.A.canUseDOM){window.docusaurus=ee;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(a.vd,{children:(0,f.jsx)(te,{children:(0,f.jsx)(V,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ne)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};L(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"core-concepts/bridging","path":"/docs/core-concepts/bridging","sidebar":"tutorialSidebar"},{"id":"core-concepts/index","path":"/docs/core-concepts/","sidebar":"tutorialSidebar"},{"id":"core-concepts/proposing","path":"/docs/core-concepts/proposing","sidebar":"tutorialSidebar"},{"id":"core-concepts/sequencing","path":"/docs/core-concepts/sequencing","sidebar":"tutorialSidebar"},{"id":"getting-started","path":"/docs/getting-started","sidebar":"tutorialSidebar"},{"id":"Guides/deploy-bridge-ui","path":"/docs/Guides/deploy-bridge-ui","sidebar":"tutorialSidebar"},{"id":"Guides/deploy-l1","path":"/docs/Guides/deploy-l1","sidebar":"tutorialSidebar"},{"id":"Guides/deploy-l1-protocols","path":"/docs/Guides/deploy-l1-protocols","sidebar":"tutorialSidebar"},{"id":"Guides/deploy-l2","path":"/docs/Guides/deploy-l2","sidebar":"tutorialSidebar"},{"id":"Guides/deploy-l2-protocols","path":"/docs/Guides/deploy-l2-protocols","sidebar":"tutorialSidebar"},{"id":"Guides/deploy-relay","path":"/docs/Guides/deploy-relay","sidebar":"tutorialSidebar"},{"id":"Guides/provers/index","path":"/docs/Guides/provers/","sidebar":"tutorialSidebar"},{"id":"Guides/provers/risc0-prover","path":"/docs/Guides/provers/risc0-prover","sidebar":"tutorialSidebar"},{"id":"Guides/provers/sgx-prover","path":"/docs/Guides/provers/sgx-prover","sidebar":"tutorialSidebar"},{"id":"Guides/provers/sp1-prover","path":"/docs/Guides/provers/sp1-prover","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/intro","sidebar":"tutorialSidebar"},{"id":"Troubleshooting/common-issues","path":"/docs/Troubleshooting/common-issues","sidebar":"tutorialSidebar"},{"id":"Troubleshooting/error-codes","path":"/docs/Troubleshooting/error-codes","sidebar":"tutorialSidebar"},{"id":"Troubleshooting/index","path":"/docs/Troubleshooting/","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"3.5.2","siteVersion":"0.0.1","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.5.2"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.5.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.5.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.5.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.5.2"}}}');var u=n(4848);const c={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},d=r.createContext(c);function p(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>h});var r=n(6540),o=n(8193),a=n(5260),i=n(440),l=n(781),s=n(3102),u=n(4848);function c(e){let{error:t,tryAgain:n}=e;return(0,u.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,u.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,u.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,u.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,u.jsx)(s.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)(p,{children:(0,u.jsxs)(h,{fallback:()=>(0,u.jsx)(c,{error:t,tryAgain:n}),children:[(0,u.jsx)(a.A,{children:(0,u.jsx)("title",{children:"Page Error"})}),(0,u.jsx)(l.A,{children:(0,u.jsx)(c,{error:t,tryAgain:n})})]})})}const m=e=>(0,u.jsx)(f,{...e});class h extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.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??m)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(545),o=n(4848);function a(e){return(0,o.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),o=n(4625),a=n(440),i=n(4586),l=n(6654),s=n(8193),u=n(3427),c=n(6025),d=n(4848);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:v}=(0,i.A)(),{trailingSlash:w,baseUrl:k}=v,x=v.future.experimental_router,{withBaseUrl:S}=(0,c.hH)(),E=(0,u.A)(),_=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>_.current));const C=p||f;const A=(0,l.A)(C),T=C?.replace("pathname://","");let j=void 0!==T?(N=T,y&&(e=>e.startsWith("/"))(N)?S(N):N):void 0;var N;"hash"===x&&j?.startsWith("./")&&(j=j?.slice(1)),j&&A&&(j=(0,a.Ks)(j,{trailingSlash:w,baseUrl:k}));const P=(0,r.useRef)(!1),R=n?o.k2:o.N_,L=s.A.canUseIntersectionObserver,O=(0,r.useRef)(),D=()=>{P.current||null==j||(window.docusaurus.preload(j),P.current=!0)};(0,r.useEffect)((()=>(!L&&A&&s.A.canUseDOM&&null!=j&&window.docusaurus.prefetch(j),()=>{L&&O.current&&O.current.disconnect()})),[O,j,L,A]);const I=j?.startsWith("#")??!1,F=!b.target||"_self"===b.target,M=!j||!A||!F||I&&"hash"!==x;g||!I&&M||E.collectLink(j),b.id&&E.collectAnchor(b.id);const z={};return M?(0,d.jsx)("a",{ref:_,href:j,...C&&!A&&{target:"_blank",rel:"noopener noreferrer"},...b,...z}):(0,d.jsx)(R,{...b,onMouseEnter:D,onTouchStart:D,innerRef:e=>{_.current=e,L&&e&&A&&(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!=j&&window.docusaurus.prefetch(j))}))})),O.current.observe(e))},to:j,...n&&{isActive:h,activeClassName:m},...z})}const f=r.forwardRef(p)},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>u,T:()=>s});var r=n(6540),o=n(4848);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 i=n(2654);function l(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 i[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return a(l({message:n,id:r}),t)}function u(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=l({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>l,hH:()=>i});var r=n(6540),o=n(4586),a=n(6654);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,l=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:l}=e;if(!r||r.startsWith("#")||(0,a.z)(r))return r;if("hash"===l)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const s=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+s:s}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:l}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6988);function a(){return(0,r.useContext)(o.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6125);function a(){return(0,r.useContext)(o.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540);const o=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(6540),o=n(4848);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),l=(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:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:l,children:t})}},3886:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>g,g1:()=>b});var r=n(6540),o=n(4070),a=n(7065),i=n(6342),l=n(679),s=n(9532),u=n(4848);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,l.Wf)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,l.Wf)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,l.Wf)(c(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(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,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(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(0,u.jsx)(f.Provider,{value:n,children:t})}function g(e){let{children:t}=e;return(0,u.jsx)(h,{children:t})}function y(){const e=(0,r.useContext)(f);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[n,i]=y(),{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])}}},609:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,t:()=>u});var r=n(6540),o=n(9532),a=n(4848);const i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(l.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(l);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},6972:(e,t,n)=>{"use strict";n.d(t,{B5:()=>S,Nr:()=>p,OF:()=>v,QB:()=>x,Vd:()=>w,Y:()=>y,fW:()=>k,w8:()=>h});var r=n(6540),o=n(6347),a=n(2831),i=n(4070),l=n(9169),s=n(1682),u=n(3886),c=n(3025),d=n(609);function p(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=p(t);if(e)return e}}(e):void 0:e.href}const f=(e,t)=>void 0!==e&&(0,l.ys)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||m(e.items,t))}function g(e,t){switch(e.type){case"category":return h(e,t)||e.items.some((e=>g(e,t)));case"link":return!e.unlisted||h(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>g(e,t)))),[e,t])}function b(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,l.ys)(a.href,n)||e(a.items))||"link"===a.type&&(0,l.ys)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function v(){const e=(0,d.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?b({sidebarItems:e.items,pathname:t}):null}function w(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,u.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)((()=>(0,s.sb)([t,n,o].filter(Boolean))),[t,n,o])}function k(e,t){const n=w(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 x(e,t){const n=w(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- ${(0,s.sb)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function S(e){let{route:t}=e;const n=(0,o.zy)(),r=(0,c.r)(),i=t.routes,l=i.find((e=>(0,o.B6)(n.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?r.docsSidebars[s]:void 0;return{docElement:(0,a.v)(i),sidebarName:s,sidebarItems:u}}},3025:(e,t,n)=>{"use strict";n.d(t,{n:()=>l,r:()=>s});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function l(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>h,vT:()=>p,Gy:()=>c,HW:()=>g,ht:()=>d,r7:()=>m,jh:()=>f});var r=n(6347),o=n(4586),a=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.A)();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){return[...e.versions].sort(((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0)).find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>{try{return function(e,t,n){void 0===t&&(t=a.W),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function p(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&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 a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return s(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(5947),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},6134:(e,t,n)=>{"use strict";var r=n(1765),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(8692)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(4164),o=n(1312),a=n(6342),i=n(8774),l=n(3427);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(4848);function c(e){let{as:t,id:n,...c}=e;const d=(0,l.A)(),{navbar:{hideOnScroll:p}}=(0,a.p)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const f=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,u.jsxs)(t,{...c,className:(0,r.A)("anchor",p?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(4848);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("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"})})}},781:(e,t,n)=>{"use strict";n.d(t,{A:()=>ft});var r=n(6540),o=n(4164),a=n(7489),i=n(1003),l=n(6347),s=n(1312),u=n(5062),c=n(4848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,s.T)({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:r}=f();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(7559),y=n(4090);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(h,{className:b.skipToContent})}var w=n(6342),k=n(5041);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:o,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,o.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.M)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,c.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,c.jsx)("div",{className:A.announcementBarPlaceholder}),(0,c.jsx)(C,{className:A.announcementBarContent}),a&&(0,c.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var j=n(2069),N=n(3104);var P=n(9532),R=n(5600);const L=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,j.M)(),t=(0,R.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,P.ZC)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,c.jsx)(L.Provider,{value:n,children:t})}function D(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(L);if(!e)throw new P.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,R.YL)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:D(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=I();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(5293),z=n(2303);function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("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 $(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("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 U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function G(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.A)(),l=(0,s.T)({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"===r?(0,s.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,o.A)(U.toggle,t),children:(0,c.jsxs)("button",{className:(0,o.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite",children:[(0,c.jsx)(B,{className:(0,o.A)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)($,{className:(0,o.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const q=r.memo(G),H={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,M.G)();return r?null:(0,c.jsx)(q,{className:t,buttonClassName:"dark"===n?H.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var W=n(3465);function Q(){return(0,c.jsx)(W.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,j.M)();return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({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(),children:(0,c.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(Q,{}),(0,c.jsx)(V,{className:"margin-right--md"}),(0,c.jsx)(K,{})]})}var Z=n(8774),X=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:l,prependBaseUrlToHref:s,...u}=e;const d=(0,X.Ay)(r),p=(0,X.Ay)(t),f=(0,X.Ay)(o,{forcePrependBaseUrl:!0}),m=a&&o&&!(0,J.A)(o),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[a,m&&(0,c.jsx)(te.A,{...l&&{width:12,height:12}})]})};return o?(0,c.jsx)(Z.A,{href:s?f:o,...u,...h}):(0,c.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...u,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,c.jsx)(ne,{className:(0,o.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,o.A)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,c.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),le=n(9169),se=n(4586);const ue="dropdownNavbarItemMobile_S0Fm";function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.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)}}),[s]),(0,c.jsxs)("div",{ref:s,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,o.A)("navbar__link",a),...l,onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:l.children??l.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_e,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...s}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.A)(),{pathname:t}=(0,l.zy)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),(0,c.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,c.jsx)(ne,{role:"button",className:(0,o.A)(ue,"menu__link menu__link--sublist menu__link--sublist-caret",n),...s,onClick:e=>{e.preventDefault(),f()},children:s.children??s.label}),(0,c.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(_e,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,c.jsx)(r,{...n})}var me=n(2131);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.jsx)("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 ge="iconLanguage_nlXk";var ye=n(418);const be={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,o.A)(n,be.navbarSearchContainer),children:t})}var we=n(4070),ke=n(6972);var xe=n(3886);function Se(e,t){return t.alternateDocVersions[e.name]??function(e){return e.docs.find((t=>t.id===e.mainDocId))}(e)}const Ee={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.A)(),p=(0,me.o)(),{search:f,hash:m}=(0,l.zy)(),h=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${o}`;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":""}})),...r],g=t?(0,s.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(fe,{...a,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(he,{className:ge}),g]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(ve,{className:n,children:(0,c.jsx)(ye.A,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,c.jsx)(i,{className:(0,o.A)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.zK)(r),i=(0,ke.QB)(t,r),l=a?.path===i?.path;return null===i||i.unlisted&&!l?null:(0,c.jsx)(ae,{exact:!0,...o,isActive:()=>l||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.zK)(r),i=(0,ke.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,ke.Vd)(r)[0],i=t??a.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,c.jsx)(ae,{...o,label:i,to:l})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:u,hash:d}=(0,l.zy)(),p=(0,we.zK)(n),f=(0,we.jh)(n),{savePreferredVersionName:m}=(0,xe.g1)(n),h=[...o,...f.map((function(e){const t=Se(e,p);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...a],g=(0,ke.Vd)(n)[0],y=t&&h.length>1?(0,s.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,b=t&&h.length>1?void 0:Se(g,p).path;return h.length<=1?(0,c.jsx)(ae,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,c.jsx)(fe,{...i,mobile:t,label:y,to:b,items:h,isActive:r?()=>!1:void 0})}};function _e(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ee[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(o,{...n})}function Ce(){const e=(0,j.M)(),t=(0,w.p)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_e,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ae(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(s.A,{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)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,w.p)().navbar.items.length,t=I();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(Ae,{onClick:()=>t.hide()}),t.content]})}function je(){const e=(0,j.M)();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?(0,c.jsx)(F,{header:(0,c.jsx)(Y,{}),primaryMenu:(0,c.jsx)(Ce,{}),secondaryMenu:(0,c.jsx)(Te,{})}):null}const Ne={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Pe(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.p)(),i=(0,j.M)(),{navbarRef:l,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,N.Mq)(((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 o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:l,"aria-label":(0,s.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)("navbar","navbar--fixed-top",n&&[Ne.navbarHideable,!d&&Ne.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Pe,{onClick:i.toggle}),(0,c.jsx)(je,{})]})}var Le=n(440);const Oe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function De(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Ie(e){let{error:t}=e;const n=(0,Le.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Oe.errorBoundaryError,children:n})}class Fe extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Me="right";function ze(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,j.M)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,s.T)({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",children:(0,c.jsx)(ze,{})})}const $e={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(Fe,{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}),children:(0,c.jsx)(_e,{...e})},t)))})}function Ge(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function qe(){const e=(0,j.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Me)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,c.jsx)(Ge,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(Be,{}),(0,c.jsx)(Q,{}),(0,c.jsx)(Ue,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Ue,{items:r}),(0,c.jsx)(V,{className:$e.colorModeToggle}),!o&&(0,c.jsx)(ve,{children:(0,c.jsx)(ye.A,{})})]})})}function He(){return(0,c.jsx)(Re,{children:(0,c.jsx)(qe,{})})}function Ve(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,l=(0,X.Ay)(n),s=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(Z.A,{className:"footer__link-item",...r?{href:a?s:r}:{to:l},...i,children:[o,r&&!(0,J.A)(r)&&(0,c.jsx)(te.A,{})]})}function We(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(Ve,{item:t})},t.href??t.to)}function Qe(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(We,{item:e},t)))})]})}function Ke(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(Qe,{column:e},t)))})}function Ye(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ze(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(Ve,{item:t})}function Xe(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Ze,{item:e}),t.length!==n+1&&(0,c.jsx)(Ye,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(Ke,{columns:t}):(0,c.jsx)(Xe,{links:t})}var et=n(1122);const tt="footerLogoLink_BH7S";function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(et.A,{className:(0,o.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,c.jsx)(Z.A,{href:t.href,className:tt,target:t.target,children:(0,c.jsx)(nt,{logo:t})}):(0,c.jsx)(nt,{logo:t})}function ot(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,c.jsx)("footer",{className:(0,o.A)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function it(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,c.jsx)(at,{style:o,links:n&&n.length>0&&(0,c.jsx)(Je,{links:n}),logo:r&&(0,c.jsx)(rt,{logo:r}),copyright:t&&(0,c.jsx)(ot,{copyright:t})})}const lt=r.memo(it),st=(0,P.fM)([M.a,k.o,N.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,c.jsx)(R.y_,{children:(0,c.jsx)(j.e,{children:(0,c.jsx)(O,{children:t})})})}]);function ut(e){let{children:t}=e;return(0,c.jsx)(st,{children:t})}var ct=n(1107);function dt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(ct.A,{as:"h1",className:"hero__title",children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(De,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(Ie,{error:t})})]})})})}const pt={mainWrapper:"mainWrapper_z2l0"};function ft(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.J)(),(0,c.jsxs)(ut,{children:[(0,c.jsx)(i.be,{title:l,description:s}),(0,c.jsx)(v,{}),(0,c.jsx)(T,{}),(0,c.jsx)(He,{}),(0,c.jsx)("div",{id:d,className:(0,o.A)(g.G.wrapper.main,pt.mainWrapper,r),children:(0,c.jsx)(a.A,{fallback:e=>(0,c.jsx)(dt,{...e}),children:t})}),!n&&(0,c.jsx)(lt,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(8774),o=n(6025),a=n(4586),i=n(6342),l=n(1122),s=n(4848);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Ay)(t.src),dark:(0,o.Ay)(t.srcDark||t.src)},i=(0,s.jsx)(l.A,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,s.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:n,logo:l}}=(0,i.p)(),{imageClassName:c,titleClassName:d,...p}=e,f=(0,o.Ay)(l?.href||"/"),m=n?"":t,h=l?.alt??m;return(0,s.jsxs)(r.A,{to:f,...p,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:h,imageClassName:c}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(5260),o=n(4848);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.A,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(6540),o=n(4164),a=n(2303),i=n(5293);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(4848);function u(e){let{className:t,children:n}=e;const u=(0,a.A)(),{colorMode:c}=(0,i.G)();return(0,s.jsx)(s.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.A)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,s.jsx)(r.Fragment,{children:a},e)}))})}function c(e){const{sources:t,className:n,alt:r,...o}=e;return(0,s.jsx)(u,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,s.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>y,u:()=>u});var r=n(6540),o=n(8193),a=n(205),i=n(3109),l=n(4848);const s="ease-in-out";function u(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??s}`,height:`${t}px`}}function l(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!o.A.canUseDOM)return e?c:d}function h(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:s,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:a}),(0,l.jsx)(t,{ref:c,style:u?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(c.current,n),i?.(n))},className:s,children:o})}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[s,u]=(0,r.useState)(t);return(0,a.A)((()=>{t||i(!0)}),[t]),(0,a.A)((()=>{o&&u(t)}),[o,t]),o?(0,l.jsx)(h,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?g:h;return(0,l.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{M:()=>h,o:()=>m});var r=n(6540),o=n(2303),a=n(679),i=n(9532),l=n(6342),s=n(4848);const u=(0,a.Wf)("docusaurus.announcement.dismiss"),c=(0,a.Wf)("docusaurus.announcement.id"),d=()=>"true"===u.get(),p=e=>u.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.p)(),t=(0,o.A)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(f.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>y,a:()=>g});var r=n(6540),o=n(8193),a=n(9532),i=n(679),l=n(6342),s=n(4848);const u=r.createContext(void 0),c="theme",d=(0,i.Wf)(c),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>o.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.p)(),[o,a]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&h(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.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:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,s.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new a.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},2069:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(6540),o=n(5600),a=n(4581),i=n(7485),l=n(6342),s=n(9532),u=n(4848);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,l.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.$Z)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function p(e){let{children:t}=e;const n=d();return(0,u.jsx)(c.Provider,{value:n,children:t})}function f(){const e=r.useContext(c);if(void 0===e)throw new s.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>u,YL:()=>s,y_:()=>l});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function l(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,l]=a,s=(0,o.Be)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>o,J:()=>a});var r=n(6540);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(6540),o=n(8193);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,l]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){l(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-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",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",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:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},7485:(e,t,n)=>{"use strict";n.d(t,{$Z:()=>i,aZ:()=>s});var r=n(6540),o=n(6347),a=n(9532);function i(e){!function(e){const t=(0,o.W6)(),n=(0,a._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function l(e){const t=(0,o.W6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function s(e){return l((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},1682:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{XI:()=>r,sb:()=>o})},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>d,Jx:()=>m});var r=n(6540),o=n(4164),a=n(5260),i=n(3102);function l(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(6025),u=n(4586);var c=n(4848);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const l=function(e){const{siteConfig:t}=(0,u.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.hH)(),p=o?d(o,{absolute:!0}):void 0;return(0,c.jsxs)(a.A,{children:[t&&(0,c.jsx)("title",{children:l}),t&&(0,c.jsx)("meta",{property:"og:title",content:l}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),l=(0,o.A)(i,t);return(0,c.jsxs)(p.Provider,{value:l,children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("html",{className:l})}),n]})}function m(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(f,{className:(0,o.A)(r,a),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>u,ZC:()=>l,_q:()=>i,dV:()=>s,fM:()=>c});var r=n(6540),o=n(205),a=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,o.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function l(e){const t=(0,r.useRef)();return(0,o.A)((()=>{t.current=e})),t.current}class s 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 u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(6540),o=n(8328),a=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>f,Tv:()=>c,a_:()=>m,gk:()=>h});var r=n(6540),o=n(8193),a=n(2303),i=n(205),l=n(9532),s=n(4848);const u=r.createContext(void 0);function c(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(0,s.jsx)(u.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(u);if(null==e)throw new l.dV("ScrollControllerProvider");return e}const p=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),o=(0,r.useRef)(p()),a=(0,l._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function m(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.A)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function h(){const e=(0,r.useRef)(null),t=(0,a.A)()&&"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 o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>c,Dv:()=>d});var r=n(6540);const o=JSON.parse('{"N":"localStorage","M":""}'),a=o.N;function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"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,s||(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),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){const n=`${e}${o.M}`;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}}(n);const r=l(t?.persistence);return null===r?u:{get:()=>{try{return r.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=r.getItem(n);r.setItem(n,e),i({key:n,oldValue:t,newValue:e,storage:r})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=r.getItem(n);r.removeItem(n),i({key:n,oldValue:e,newValue:null,storage:r})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===r&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),o=n(6347),a=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.A)(),{pathname:s}=(0,o.zy)(),u=(0,a.Ks)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),o=n(6347),a=n(9532);function i(e){const t=(0,o.zy)(),n=(0,a.ZC)(t),i=(0,a._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(4586);function o(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),l="/"===i||i===r?i:(s=i,u=n,u?o(s):a(s));var s,u;return e.replace(i,l)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a;const r=n(2566);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},440:(e,t,n)=>{"use strict";t.rA=t.Ks=void 0;const r=n(1635);var o=n(2983);Object.defineProperty(t,"Ks",{enumerable:!0,get:function(){return r.__importDefault(o).default}});var a=n(2566);var i=n(253);Object.defineProperty(t,"rA",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>f,sC:()=>T,AO:()=>p});var r=n(8168);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(1561);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!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,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={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]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,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,o,a,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,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,o;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 o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}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=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{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)*o(Math.random()*t,.1,.95)),t=o(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 o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},5302:(e,t,n)=>{var r=n(4634);e.exports=m,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,l=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(l,f),l=f+d.length,p)s+=p[1];else{var m=e[l],h=n[2],g=n[3],y=n[4],b=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=h&&null!=m&&m!==h,x="+"===v||"*"===v,S="?"===v||"*"===v,E=h||u,_=y||b,C=h||("string"==typeof r[r.length-1]?r[r.length-1]:"");r.push({name:g||a++,prefix:h||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:_?c(_):w?".*":i(E,C)})}}return l-1?"[^"+u(e)+"]+?":u(t)+"|(?:(?!"+u(t)+")[^"+u(e)+"])+?"}function l(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o{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"}}})},8722:(e,t,n)=>{const r=n(6969),o=n(8380),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(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(3157).resolve(t)],delete Prism.languages[e],n(3157)(t),a.add(e)}))}i.silent=!1,e.exports=i},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=p.substring(m+f.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(Prism)},8692:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=8692},3157:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3157},8380: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 o(t,a),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(s),m=c;o(m);){for(var h in p={},m){var g=s[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var y in d)if(!(y in c))for(var b in f(y))if(b in c){p[y]=!0;break}for(var v in m=p)c[v]=!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,o){var a=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var o,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)o=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete s[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return l[e]=o}for(var c in n)u(c);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2694:(e,t,n)=>{"use strict";var r=n(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,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:a,resetWarningCache:o};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),o=n(9982);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n