1"use strict";(globalThis.webpackChunkpublic_docs=globalThis.webpackChunkpublic_docs||[]).push([[4583],{13863(e,t,o){o.r(t),o.d(t,{default:()=>ke});var n=o(96540),i=o(34164),a=o(28774),r=o(44586),s=o(3374),l=o(51107);const c="readout_tm8p",d="section_NQHp",u="subhead_vCBJ",h="grid_kkzx",p="gridSingle_Q90b",m="rowHidden_fa8i",g="row_Ioug",b="label_sdPr",x="value_DL_5",f="unit_kT37",_="labelLink_uDkI",j="doraLink_Sgnx",v="flapRow_i4Ee",k="flap_l2D4",y="labLink_yQ5t";var w=o(74848);const N=" ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:%#/-_";function A({target:e,delay:t}){const[o,i]=(0,n.useState)(" "),a=(0,n.useRef)(" ");return(0,n.useEffect)(()=>{const o=(e||" ").toUpperCase(),n=-1===N.indexOf(o)?0:N.indexOf(o),r=N[n];if(a.current===r)return;if("undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)return a.current=r,void i(r);let s,l,c=0;const d=()=>{if(c+=38,c>=460)return a.current=r,void i(r);const e=N.indexOf(a.current),t=N[(e+1)%45];a.current=t,i(t),s=setTimeout(d,38)};return l=setTimeout(d,t),()=>{clearTimeout(l),clearTimeout(s)}},[e,t]),(0,w.jsx)("span",{className:k,"data-blank":" "===o?"true":void 0,children:" "===o?"\xa0":o})}function U({text:e}){const t=String(null==e?"":e).toUpperCase(),o=t.split("");return(0,w.jsx)("span",{className:v,"aria-label":t,children:o.map((e,t)=>(0,w.jsx)(A,{target:e,delay:28*t},t))})}const M="https://cbt-api-mainnet.analytics.production.platform.ethpandaops.io/api/v1";const T=(e,t,o)=>{const n=e&&e[t];return Array.isArray(n)&&0!==n.length?n.reduce((e,t)=>t.hour_start_date_time>e.hour_start_date_time?t:e)[o]:null};const E=["phase0","altair","bellatrix","capella","deneb","electra","fulu","gloas","glamsterdam","osaka","amsterdam"];function H(e){const t=e&&e.consensus;if(!t)return null;const o=Object.entries(t);return o.length?(o.sort((e,t)=>{const o=e[1].epoch||0,n=t[1].epoch||0;return n!==o?n-o:E.indexOf(t[0])-E.indexOf(e[0])}),o[0][0]):null}function I({label:e,value:t,unit:o,labelHref:n,doraHref:i,hidden:r}){const s=n?(0,w.jsx)(a.A,{className:`${b} ${_}`,to:n,children:e}):(0,w.jsx)("span",{className:b,children:e});return(0,w.jsxs)("div",{className:r?`${g} ${m}`:g,"aria-hidden":r||void 0,children:[s,(0,w.jsxs)("span",{className:x,children:[(0,w.jsx)(U,{text:t}),o?(0,w.jsx)("span",{className:f,children:o}):null,i?(0,w.jsx)("a",{className:j,href:i,target:"_blank",rel:"noopener noreferrer",title:"Open in Dora",children:"\u2197"}):null]})]})}function C(){const e=function(){const[e,t]=(0,n.useState)(null);return(0,n.useEffect)(()=>{let e=!1;const o=async()=>{const o=Math.floor(Date.now()/1e3)-360;try{const[n,i,a]=await Promise.all([fetch(`${M}/fct_block_head?slot_start_date_time_gte=${o}&page_size=80`).then(e=>e.json()),fetch(`${M}/fct_block_proposer_entity?slot_start_date_time_gte=${o}&page_size=80`).then(e=>e.json()),fetch(`${M}/fct_block_mev_head?slot_start_date_time_gte=${o}&page_size=80`).then(e=>e.json())]),r=(n.fct_block_head||[]).filter(e=>e.execution_payload_block_number).sort((e,t)=>t.slot-e.slot);if(0===r.length)return;const s={};(i.fct_block_proposer_entity||[]).forEach(e=>{s[e.slot]=e.entity});const l={};let c=null;(a.fct_block_mev_head||[]).forEach(e=>{l[e.slot]=e,(!c||e.slot>c.slot)&&(c=e)});const d=r.find(e=>null!=s[e.slot])||r[0],u=l[d.slot]||c;if(e)return;const h=d.execution_payload_transactions_count;t({number:d.execution_payload_block_number,entity:s[d.slot]||null,txns:h,tps:Math.round(h/12),gas:d.execution_payload_gas_used,blobs:Math.round((d.execution_payload_blob_gas_used||0)/131072),mev:u?Number(u.value)/1e18:null,relay:u&&Array.isArray(u.relay_names)&&u.relay_names.length?u.relay_names[0]:null})}catch(m){}};o();const n=setInterval(o,12e3);return()=>{e=!0,clearInterval(n)}},[]),e}(),t=function(){const[e,t]=(0,n.useState)({participation:null,inclusion:null,blobs:null,reward:null});return(0,n.useEffect)(()=>{let e=!1;const o=Math.floor(Date.now()/1e3)-14400,n=e=>fetch(`${M}/${e}?hour_start_date_time_gte=${o}&page_size=8`).then(e=>e.json());return Promise.allSettled([n("fct_attestation_participation_rate_hourly"),n("fct_attestation_inclusion_delay_hourly"),n("fct_blob_count_hourly"),n("fct_proposer_reward_hourly")]).then(([o,n,i,a])=>{e||t({participation:"fulfilled"===o.status?T(o.value,"fct_attestation_participation_rate_hourly","avg_participation_rate"):null,inclusion:"fulfilled"===n.status?T(n.value,"fct_attestation_inclusion_delay_hourly","avg_inclusion_delay"):null,blobs:"fulfilled"===i.status?T(i.value,"fct_blob_count_hourly","avg_blob_count"):null,reward:"fulfilled"===a.status?T(a.value,"fct_proposer_reward_hourly","avg_reward_eth"):null})}),()=>{e=!0}},[]),e}
1(),o=function(){const[e,t]=(0,n.useState)(null);return(0,n.useEffect)(()=>{let e=!1;return fetch("https://ethpandaops-platform-production-cartographoor.ams3.digitaloceanspaces.com/networks.json").then(e=>e.json()).then(o=>{if(e)return;const n=Object.entries(o.networks||{}).filter(([,e])=>"active"===e.status&&e.repository).map(([e,t])=>({id:e,fork:H(t.forks),genesisTime:t.genesisConfig&&t.genesisConfig.genesisTime||0,dora:t.serviceUrls&&t.serviceUrls.dora||null})).sort((e,t)=>t.genesisTime-e.genesisTime);t({items:n.slice(0,6),total:n.length})}).catch(()=>{}),()=>{e=!0}},[]),e}(),i=function(){const[e,t]=(0,n.useState)(null);return(0,n.useEffect)(()=>{let e=!1;const o=Math.floor(Date.now()/1e3)-14400;return fetch(`${M}/fct_block_proposal_status_hourly?hour_start_date_time_gte=${o}&page_size=60`).then(e=>e.json()).then(o=>{const n=o.fct_block_proposal_status_hourly||[];if(!n.length||e)return;const i=Math.max(...n.map(e=>e.hour_start_date_time)),a=n.find(e=>e.hour_start_date_time===i&&"missed"===e.status);t(a?a.slot_count:0)}).catch(()=>{}),()=>{e=!0}},[]),e}(),a=function(){const[e,t]=(0,n.useState)(null);return(0,n.useEffect)(()=>{let e=!1;const o=Math.floor(Date.now()/1e3)-600;return fetch(`${M}/fct_data_column_availability_by_slot?slot_start_date_time_gte=${o}&page_size=400`).then(e=>e.json()).then(o=>{const n=(o.fct_data_column_availability_by_slot||[]).map(e=>e.availability_pct).filter(e=>null!=e);n.length&&!e&&t(Math.round(n.reduce((e,t)=>e+t,0)/n.length))}).catch(()=>{}),()=>{e=!0}},[]),e}(),r=function(){const[e,t]=(0,n.useState)(null);return(0,n.useEffect)(()=>{let e=!1;const o=Math.floor(Date.now()/1e3)-14400;return fetch(`${M}/fct_engine_new_payload_winrate_hourly?hour_start_date_time_gte=${o}&node_class_eq=eip7870-block-builder&page_size=300`).then(e=>e.json()).then(o=>{const n=o.fct_engine_new_payload_winrate_hourly||[];if(!n.length||e)return;const i=Math.max(...n.map(e=>e.hour_start_date_time)),a={};let r=0;n.filter(e=>e.hour_start_date_time===i).forEach(e=>{const t=e.meta_execution_implementation||"?",o=e.win_count||0;a[t]=(a[t]||0)+o,r+=o});const s=Object.entries(a).map(([e,t])=>({name:e,pct:r?Math.round(t/r*100):0})).sort((e,t)=>t.pct-e.pct);s.length&&!e&&t(s[0])}).catch(()=>{}),()=>{e=!0}},[]),e}(),s="\xb7\xb7\xb7",l=[{title:"latest mainnet block",rows:[{label:"block",value:e?`#${e.number}`:s},{label:"proposer",value:e?(m=e.entity,m?m.startsWith("whale_")?`whale ${m.slice(6,12)}`:m:"unknown").slice(0,12):s},{label:"transactions",value:e?e.txns.toLocaleString():s},{label:"throughput",value:e?String(e.tps):s,unit:e?"tx/s":""},{label:"gas used",value:e?(e.gas/1e6).toFixed(1):s,unit:e?"Mgas":""},{label:"blobs",value:e?String(e.blobs):s},{label:"mev value",value:e&&null!=e.mev?e.mev.toFixed(4):s,unit:e&&null!=e.mev?"ETH":""},{label:"via relay",value:e&&e.relay?e.relay.slice(0,11):s}]},{title:"last hour on mainnet",rows:[{label:"participation",value:null!=t.participation?t.participation.toFixed(1):s,unit:null!=t.participation?"%":""},{label:"missed slots",value:null!=i?String(i):s},{label:"inclusion delay",value:null!=t.inclusion?t.inclusion.toFixed(2):s,unit:null!=t.inclusion?"slots":""},{label:"proposer reward",value:null!=t.reward?t.reward.toFixed(3):s,unit:null!=t.reward?"ETH":""},{label:"data availability",value:null!=a?String(a):s,unit:null!=a?"%":""},{label:"blobs / block",value:null!=t.blobs?t.blobs.toFixed(1):s,unit:null!=t.blobs?"avg":""},{label:"el winrate",value:r?r.name:s,unit:r?`${r.pct}%`:""}]},{title:o?`active devnets \xb7 ${o.total}`:"active devnets",cols:1,rows:Array.from({length:6},(e,t)=>{if(!o)return{label:"\xb7\xb7\xb7\xb7\xb7",value:s};const n=o.items[t];return n?{label:n.id,value:n.fork||"?",labelHref:`/networks/${n.id}`,doraHref:n.dora}:{label:"\xb7\xb7\xb7\xb7\xb7",value:s,hidden:!0}})}];var m;return(0,w.jsxs)("div",{className:c,children:[(0,w.jsx)("a",{className:y,href:"https://lab.ethpandaops.io",target:"_blank",rel:"noopener noreferrer",children:"> Live data from The Lab \u2197"}),l.map(e=>(0,w.jsxs)("div",{className:d,children:[(0,w.jsx)("div",{className:u,children:e.title}),(0,w.jsx)("div",{className:1===e.cols?p:h,children:e.rows.map((e,t)=>(0,w.jsx)(I,{label:e.label,value:e.value,unit:e.unit,labelHref:e.labelHref,doraHref:e.doraHref,hidden:e.hidden},`${e.label}-${t}`))})]},e.title))]})}const G="journeySection_q34Z",z="sectionTitle_PJcP",D="sectionSubtitle_DUky",S="journeyCard_DOFl",L="journeyImageContainer__KE4",P="journeyImage_VVjA",$="journeyTitle_uF1m",O="journeyDescription_PkD2",B="journeyFeatures_u3wq",F="journeyActions_NYpr";function q(){return(0,w.jsx)("section",{className:G,children:(0,w.jsxs)("div",{className:"container mobile-spacing",children:[(0,w.jsx)("div",{className:"row",children:(0,w.jsxs)("div",{className:"col col--12 text--center",children:[(0,w.jsx)(l.A,{as:"h2",className:z,children:"Find Your Path"}),(0,w.jsx)("p",{className:D,children:"Discover the right tools and guides for your role in the Ethereum ecosystem"})]})}),(0,w.jsxs)("div",{className:"row margin-top--lg journey-row",children:[(0,w.jsx)("div",{className:"col col--4",children:(0,w.jsxs)("div",{className:S,children:[(0,w.jsx)("div",{className:L,children:(0,w.jsx)("img",{src:"/img/paths/node-operator.jpg",alt:"Node Operators",className:P})}),(0,w.jsx)(l.A,{as:"h3",className:$,children:"Node Operators"}),(0,w.jsx)("p",{className:O,children:"Optimize your Ethereum node operations with our monitoring and testing tools"}),(0,w.jsxs)("ul",{className:B,children:[(0,w.jsx)("li",{children:"Real-time node monitoring"}),(0,w.jsx)("li",{children:"Performance optimization"}),(0,w.jsx)("li",{children:"Network health tracking"}),(0,w.jsx)("li",{children:"Client diversity tools"})]}),(0,w.jsx)("div",{className:F,children:(0,w.jsx)(a.A,{className:"button button--primary",to:"/docs/guides/node
1-operators/",children:"Node Operator Guides"})})]})}),(0,w.jsx)("div",{className:"col col--4",children:(0,w.jsxs)("div",{className:S,children:[(0,w.jsx)("div",{className:L,children:(0,w.jsx)("img",{src:"/img/paths/client-developer.jpg",alt:"Client Developers",className:P})}),(0,w.jsx)(l.A,{as:"h3",className:$,children:"Client Developers"}),(0,w.jsx)("p",{className:O,children:"Build and test on Ethereum with our development environments and packages"}),(0,w.jsxs)("ul",{className:B,children:[(0,w.jsx)("li",{children:"Local testing environments"}),(0,w.jsx)("li",{children:"Smart contract tools"}),(0,w.jsx)("li",{children:"API integrations"}),(0,w.jsx)("li",{children:"Ethereum package deployment"})]}),(0,w.jsx)("div",{className:F,children:(0,w.jsx)(a.A,{className:"button button--primary",to:"/docs/guides/client-developers/",children:"Client Developer Guides"})})]})}),(0,w.jsx)("div",{className:"col col--4",children:(0,w.jsxs)("div",{className:S,children:[(0,w.jsx)("div",{className:L,children:(0,w.jsx)("img",{src:"/img/paths/data-analyst.jpg",alt:"Data Analysts",className:P})}),(0,w.jsx)(l.A,{as:"h3",className:$,children:"Data Analysts"}),(0,w.jsx)("p",{className:O,children:"Analyze Ethereum network data with our analytical tools and pipelines"}),(0,w.jsxs)("ul",{className:B,children:[(0,w.jsx)("li",{children:"Data visualization tools"}),(0,w.jsx)("li",{children:"Advanced query interfaces"}),(0,w.jsx)("li",{children:"Real-time network analytics"}),(0,w.jsx)("li",{children:"Custom dashboard creation"})]}),(0,w.jsx)("div",{className:F,children:(0,w.jsx)(a.A,{className:"button button--primary",to:"/docs/guides/data-analysts/",children:"Data Analyst Guides"})})]})})]})]})})}const R="homeMain_qdI4",W="heroBanner_qdFl",V="scrollCue_xAtG",K="title_GqtP",J="subtitle_RlPM",Q="heroGrid_ibpR",Y="heroMain_N6Sr",Z="heroAside_AFFD",X="toolsHeader_K0BG",ee="toolsKicker_iHMG",te="toolsMore__r2N",oe="featuresTitle_MgoA",ne="sectionTitle_Ut5p",ie="sectionSubtitle_AZuW",ae="cardIconWrapper_fgq5",re="cardIcon_I6MN",se="hidden_zUxV",le="featuresSubtitle_whyW",ce="exploreMoreContainer_G9Il",de="exploreMoreButton_iKqt",ue="exploreMoreIcon_DH6s",he="ticker_geV8",pe="tickerRow_AmR_",me="tickerTrack_Ckk5",ge="tickerReverse_wQ4g",be="tickerPill_Hnoz";const xe=o(71433);function fe(){const{siteConfig:e}=(0,r.A)();return(0,w.jsxs)("header",{className:(0,i.A)("hero",W,"homepage-header"),children:[(0,w.jsx)("div",{className:(0,i.A)("container","homepage-header-content"),children:(0,w.jsxs)("div",{className:Q,children:[(0,w.jsxs)("div",{className:Y,children:[(0,w.jsx)(l.A,{as:"h1",className:(0,i.A)("hero__title",K),children:"The infrastructure behind every Ethereum fork"}),(0,w.jsx)("p",{className:(0,i.A)("hero__subtitle",J),children:"Testing, devnets, observability and data. 30+ open-source tools the core developers rely on to ship Ethereum's network upgrades securely and quickly."}),(0,w.jsxs)("div",{className:"header-buttons",children:[(0,w.jsx)(a.A,{className:"button button--primary button--lg",to:"/posts/",children:"Read the Blog"}),(0,w.jsx)(a.A,{className:"button button--secondary button--lg",to:"/data/",children:"Browse the Data"}),(0,w.jsx)(a.A,{className:"button button--secondary button--lg",to:"/docs/tooling/overview/",children:"Explore Our Tools"})]})]}),(0,w.jsx)("aside",{className:Z,children:(0,w.jsx)(C,{})})]})}),(0,w.jsxs)("a",{className:V,href:"#tools","aria-label":"Scroll to explore",children:[(0,w.jsx)("span",{children:"scroll"}),(0,w.jsx)("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,w.jsx)("path",{d:"M6 9L12 15L18 9",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})]})]})}function _e(){const e=Math.ceil(xe.length/2),t=[xe.slice(0,e),xe.slice(e)];return(0,w.jsx)("div",{className:he,"aria-label":`${xe.length} open-source tools`,children:t.map((e,t)=>(0,w.jsx)("div",{className:(0,i.A)(pe,1===t&&ge),children:(0,w.jsx)("div",{className:me,children:[...e,...e].map((t,o)=>(0,w.jsx)(a.A,{to:t.learnMoreUrl,className:be,"aria-hidden":o>=e.length||void 0,children:t.title},o))})},t))})}function je(){return(0,w.jsxs)("section",{className:"feature-section",id:"tools",children:[(0,w.jsx)("div",{className:"container",children:(0,w.jsxs)("div",{className:X,children:[(0,w.jsx)("span",{className:ee,children:"The toolkit"}),(0,w.jsxs)(l.A,{as:"h2",className:oe,children:[xe.length," open-source tools across the Ethereum stack"]}),(0,w.jsx)("p",{className:le,children:"From spinning up devnets to monitoring the live network \u2014 testing, observability and data tooling, all open source. This is the whole toolkit:"})]})}),(0,w.jsx)(_e,{}),(0,w.jsx)("div",{className:"container",children:(0,w.jsx)("div",{className:te,children:(0,w.jsx)(a.A,{className:ce,to:"/docs/tooling/overview/",children:(0,w.jsxs)("span",{className:de,children:["Dig into all ",xe.length," tools",(0,w.jsxs)("svg",{className:ue,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,w.jsx)("path",{d:"M5 12H19",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),(0,w.jsx)("path",{d:"M12 5L19 12L12 19",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]})]})})})})]})}function ve(){return(0,w.jsxs)("section",{className:"community-section",children:[(0,w.jsx)("svg",{width:"0",height:"0",className:se,children:(0,w.jsxs)("linearGradient",{id:"icon-gradient",x1:"0%",y1:"0%",x2:"100%",y2:"100%",children:[(0,w.jsx)("stop",{offset:"0%",stopColor:"var(--ifm-color-primary)"}),(0,w.jsx)("stop",{offset:"100%",stopColor:"var(--ifm-color-primary-darkest)"})]})}),(0,w.jsxs)("div",{className:"container mobile-spacing",children:[(0,w.jsx)("div",{className:"row",children:(0,w.jsxs)("div",{className:"col col--12 text--center",children:[(0,w.jsx)(l.A,{as:"h2",className:ne,children:"Join the ethPandaOps Community"}),(0,w.jsx)("p",{className:ie,children:"We're a team of dedicated pandas with a passion for decentralization and a knack for bamboo-chomping. Our mission? To contribute to the evolution of Ethereum, one byte at a time!"})]})}),(0,w.jsxs)("div",{className:"row margin-top--lg community-row",children:[(0,w.jsx)("div",{className:"col col--6",children:(0,w.jsxs)("div",{className:"community-card",children:[(0,w.jsx)("div",{className:ae,children:(0,w.jsx)("svg",{className:re,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,w.jsx)("path",{d:"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"})})}),(0,w.jsx)(l.A,{as:"h3",children:"Contribute"}),(0,w.jsx)("p",{children:"Help us build and maintain Ethereum infrastru
1cture tools. All of our projects are open source and welcome contributions from developers of all experience levels. Join us in creating a more decentralized future!"}),(0,w.jsx)(a.A,{className:"button button--primary",href:"https://github.com/ethpandaops",target:"_blank",children:"GitHub Organization"})]})}),(0,w.jsx)("div",{className:"col col--6",children:(0,w.jsxs)("div",{className:"community-card",children:[(0,w.jsx)("div",{className:ae,children:(0,w.jsx)("svg",{className:re,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,w.jsx)("path",{d:"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"})})}),(0,w.jsx)(l.A,{as:"h3",children:"Learn & Connect"}),(0,w.jsx)("p",{children:"Connect with us on the Ethereum R&D Discord server where Ethereum infrastructure operators and developers collaborate. Share ideas, ask questions, and participate in discussions about Ethereum's future."}),(0,w.jsx)(a.A,{className:"button button--primary",href:"https://discord.com/invite/qGpsxSA",target:"_blank",children:"Join Eth R&D Discord"})]})})]})]})]})}function ke(){const{siteConfig:e}=(0,r.A)();return(0,w.jsxs)(s.A,{title:`${e.title} - Ethereum Infrastructure Tools`,description:"ethPandaOps provides open-source tools and services for Ethereum infrastructure operators and developers.",children:[(0,w.jsx)(fe,{}),(0,w.jsxs)("main",{className:R,children:[(0,w.jsx)(je,{}),(0,w.jsx)("div",{className:"divider-container",children:(0,w.jsx)("hr",{className:"section-divider"})}),(0,w.jsx)(q,{}),(0,w.jsx)(ve,{})]})]})}},71433(e){e.exports=JSON.parse('[{"id":"ethereum-package","title":"Ethereum Package","description":"A Kurtosis package for deploying and testing Ethereum networks locally in a containerized environment.","image":"/img/tools/ethereum-package.jpg","learnMoreUrl":"/docs/tooling/kurtosis/","actionUrl":"https://github.com/ethpandaops/ethereum-package","actionText":"GitHub","actionIcon":"external"},{"id":"lab","title":"The Lab","description":"A research and development environment for Ethereum network testing and analysis.","image":"/img/tools/thelab.jpg","learnMoreUrl":"/docs/tooling/lab/","actionUrl":"https://lab.ethpandaops.io/","actionText":"Visit","actionIcon":"external"},{"id":"contributoor","title":"Contributoor","description":"A monitoring and data-gathering tool that helps improve Ethereum\'s network visibility.","image":"/img/tools/contributoor.jpg","learnMoreUrl":"/docs/tooling/contributoor/","actionUrl":"https://github.com/ethpandaops/contributoor-installer","actionText":"GitHub","actionIcon":"external"},{"id":"assertoor","title":"Assertoor","description":"A comprehensive testing tool for Ethereum networks with orchestrated test sequences and real-time monitoring.","image":"/img/tools/assertoor.jpg","learnMoreUrl":"/docs/tooling/assertoor/","actionUrl":"https://github.com/ethpandaops/assertoor","actionText":"GitHub","actionIcon":"external"},{"id":"xatu","title":"Xatu","description":"An open-source data pipeline for Ethereum, collecting and transforming data from execution and consensus clients.","image":"/img/tools/xatu.jpg","learnMoreUrl":"/docs/tooling/xatu/","actionUrl":"https://github.com/ethpandaops/xatu","actionText":"GitHub","actionIcon":"external"},{"id":"dora","title":"Dora","description":"A block explorer for Ethereum testnet and research networks with enhanced debugging features.","image":"/img/tools/dora.jpg","learnMoreUrl":"/docs/tooling/dora/","actionUrl":"https://github.com/ethpandaops/dora","actionText":"GitHub","actionIcon":"external"},{"id":"snapshotter","title":"Snapshotter","description":"A specialized tool for capturing and managing Ethereum node data snapshots, enabling fast node bootstrapping and data recovery.","image":"/img/tools/snapshotter.jpg","learnMoreUrl":"/docs/tooling/snapshotter/","actionUrl":"https://github.com/ethpandaops/snapshotter","actionText":"GitHub","actionIcon":"external"},{"id":"forky","title":"Forky","description":"An Ethereum beacon chain fork choice visualizer that helps operators and developers understand the state of the beacon chain in real-time.","image":"/img/tools/forky.jpg","learnMoreUrl":"/docs/tooling/forky/","actionUrl":"https://github.com/ethpandaops/forky","actionText":"GitHub","actionIcon":"external"},{"id":"cbt","title":"CBT","description":"A ClickHouse-focused data transformation tool providing fast idempotent transformations with dependency management for building reliable data pipelines.","image":"/img/tools/cbt.jpg","learnMoreUrl":"/docs/tooling/cbt/","actionUrl":"https://github.com/ethpandaops/cbt","actionText":"GitHub","actionIcon":"external"},{"id":"cbt-api","title":"CBT API","description":"Automatic REST API generator for ClickHouse databases with OpenAPI specifications, making it easy to expose your data via modern APIs.","
1image":"/img/tools/cbt-api.jpg","learnMoreUrl":"/docs/tooling/cbt-api/","actionUrl":"https://github.com/ethpandaops/cbt-api","actionText":"GitHub","actionIcon":"external"},{"id":"clickhouse-proto-gen","title":"ClickHouse Proto Gen","description":"CLI tool for generating Protocol Buffer schemas from ClickHouse tables, enabling type-safe data access and cross-platform compatibility.","image":"/img/tools/clickhouse-proto-gen.jpg","learnMoreUrl":"/docs/tooling/clickhouse-proto-gen/","actionUrl":"https://github.com/ethpandaops/clickhouse-proto-gen","actionText":"GitHub","actionIcon":"external"},{"id":"syncoor","title":"Syncoor","description":"Ethereum synchronization testing platform that orchestrates, monitors, and visualizes client sync performance.","image":"/img/tools/syncoor.jpg","learnMoreUrl":"/docs/tooling/syncoor/","actionUrl":"https://github.com/ethpandaops/syncoor","actionText":"GitHub","actionIcon":"external"},{"id":"rpc-snooper","title":"RPC Snooper","description":"Lightweight RPC proxy for debugging Ethereum client communications with flow control API.","image":"/img/tools/rpc-snooper.jpg","learnMoreUrl":"/docs/tooling/rpc-snooper/","actionUrl":"https://github.com/ethpandaops/rpc-snooper","actionText":"GitHub","actionIcon":"external"},{"id":"brakebear","title":"Brakebear","description":"Apply network constraints (bandwidth, latency, loss) to Docker containers using Linux traffic control.","image":"/img/tools/brakebear.jpg","learnMoreUrl":"/docs/tooling/brakebear/","actionUrl":"https://github.com/ethpandaops/brakebear","actionText":"GitHub","actionIcon":"external"},{"id":"ansible-collection","title":"Ansible Collection","description":"A collection of 45+ reusable Ansible roles for deploying and managing Ethereum infrastructure.","image":"/img/tools/ansible-collection.jpg","learnMoreUrl":"/docs/tooling/ansible-collection/","actionUrl":"https://github.com/ethpandaops/ansible-collection-general","actionText":"GitHub","actionIcon":"external"},{"id":"helm-charts","title":"Ethereum Helm Charts","description":"Helm charts for deploying Ethereum execution and consensus clients on Kubernetes infrastructure.","image":"/img/tools/ethereum-helm-charts.jpg","learnMoreUrl":"/docs/tooling/helm-charts/","actionUrl":"https://github.com/ethpandaops/ethereum-helm-charts","actionText":"GitHub","actionIcon":"external"},{"id":"bootnodoor","title":"Bootnodoor","description":"Universal Ethereum bootnode supporting dual-layer peer discovery with fork-aware routing.","image":"/img/tools/bootnodoor.jpg","learnMoreUrl":"/docs/tooling/bootnodoor/","actionUrl":"https://github.com/ethpandaops/bootnodoor","actionText":"GitHub","actionIcon":"external"},{"id":"nodekey-tools","title":"Node Key Tools","description":"Ethereum node key generator for secp256k1 keys with DAS support and multi-format compatibility.","image":"/img/tools/nodekey-tools.jpg","learnMoreUrl":"/docs/tooling/nodekey-tools/","actionUrl":"https://github.com/ethpandaops/nodekey-tools","actionText":"GitHub","actionIcon":"external"},{"id":"splitoor","title":"Splitoor","description":"CLI tool for monitoring and managing 0xSplits v1 smart contracts on Ethereum.","image":"/img/tools/splitoor.jpg","learnMoreUrl":"/docs/tooling/splitoor/","actionUrl":"https://github.com/ethpandaops/splitoor","actionText":"GitHub","actionIcon":"external"},{"id":"hive-auxiliary-helpers","title":"Hive Auxiliary Helpers","description":"Tools extending Ethereum\'s Hive testing framework with web UI, CI/CD automation, and test suites.","image":"/img/tools/hive-auxiliary-tools.jpg","learnMoreUrl":"/docs/tooling/hive-auxiliary-helpers/","actionUrl":"https://github.com/ethpandaops/hive-ui","actionText":"GitHub","actionIcon":"external"},{"id":"dugtrio","title":"Dugtrio","description":"A load balancing proxy for the Ethereum beacon chain.","image":"/img/tools/dugtrio.jpg","learnMoreUrl":"/docs/tooling/dugtrio/","actionUrl":"https://github.com/ethpandaops/dugtrio","actionText":"GitHub","actionIcon":"external"},{"id":"spamoor","title":"Spamoor","description":"A tool to generate spam transactions for Ethereum testnets. Useful for testing network performance and client behavior under different load conditions.","image":"/img/tools/spamoor.jpg","learnMoreUrl":"/docs/tooling/spamoor/","actionUrl":"https://github.com/ethpandaops/spamoor","actionText":"GitHub","actionIcon":"external"},{"id":"funding-vault","title":"Funding Vault","description":"A smart contract for providing testnet funds for Ethereum testnets.","image":"/img/tools/funding-vault.jpg","learnMoreUrl":"/docs/tooling/funding-vault/","actionUrl":"https://github.com/ethpandaops/funding-vault","actionText":"GitHub","actionIcon":"external"},{"id":"mempool-bridge","title":"Mempool Bridge","description":"A bridge for mempool transactions between execution nodes.","image":"/img/tools/mempool-bridge.jpg","learnMoreUrl":"/docs/tooling/mempool-bridge/","actionUrl":"https://github.com/ethpandaops/mempool-bridge","actionText":"GitHub","actionIcon":"external"},{"id":"checkpointz","title":"Checkpointz","description":"Facilitating checkpoint sync for Ethereum consensus clients.","image":"/img/tools/checkpointz.jpg","learnMoreUrl":"/docs/tooling/checkpointz/","actionUrl":"https://github.com/ethpandaops/checkpointz","actionText":"GitHub","actionIcon":"external"},{"id":"tracoor","title":"Tracoor","description":"Visualizer to track and display invali
1d slots and blocks for debugging.","image":"/img/tools/tracoor.jpg","learnMoreUrl":"/docs/tooling/tracoor/","actionUrl":"https://github.com/ethpandaops/tracoor","actionText":"GitHub","actionIcon":"external"},{"id":"ethereum-genesis-generator","title":"Ethereum Genesis Generator","description":"A tool for generating Ethereum genesis states. Required when creating new Ethereum networks.","image":"/img/tools/ethereum-genesis-generator.jpg","learnMoreUrl":"/docs/tooling/genesis-generator/","actionUrl":"https://github.com/ethpandaops/ethereum-genesis-generator","actionText":"GitHub","actionIcon":"external"},{"id":"ethereum-metrics-exporter","title":"Ethereum Metrics Exporter","description":"Generic prometheus metrics exporter for Ethereum Clients","image":"/img/tools/metrics-exporter.jpg","learnMoreUrl":"/docs/tooling/metrics-exporter/","actionUrl":"https://github.com/ethpandaops/ethereum-metrics-exporter","actionText":"GitHub","actionIcon":"external"},{"id":"dispatchoor","title":"Dispatchoor","description":"A GitHub Actions workflow orchestrator that dispatches jobs based on runner availability to optimize infrastructure utilization.","image":"/img/tools/dispatchoor.jpg","learnMoreUrl":"/docs/tooling/dispatchoor/","actionUrl":"https://github.com/ethpandaops/dispatchoor","actionText":"GitHub","actionIcon":"external"},{"id":"zkboost","title":"zkboost","description":"zkboost is an EIP 8025 Proof Node implementation for CL to request execution proof generation and verification.","image":"/img/tools/zkboost.jpg","learnMoreUrl":"/docs/tooling/zkboost/","actionUrl":"https://github.com/eth-act/zkboost","actionText":"GitHub","actionIcon":"external"},{"id":"proofessoor","title":"Proofessoor","description":"A clientless requestor that asks zkboost to prove Ethereum execution blocks and tracks each proof request from submission to outcome.","image":"/img/tools/proofessoor.jpg","learnMoreUrl":"/docs/tooling/proofessoor/","actionUrl":"https://github.com/ethpandaops/proofessoor","actionText":"GitHub","actionIcon":"external"}]')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.