1"use strict";(globalThis.webpackChunkpublic_docs=globalThis.webpackChunkpublic_docs||[]).push([[1871],{28453(e,n,s){s.d(n,{R:()=>i,x:()=>c});var o=s(96540);const t={},r=o.createContext(t);function i(e){const n=o.useContext(r);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(t):e.components||t:i(e.components),o.createElement(r.Provider,{value:n},e.children)}},59951(e,n,s){s.d(n,{A:()=>l});s(96540);const o="heroBanner_p5AC",t="overlay_Ob9f",r="content_XlV_",i="title_v07c",c="description_nfNL";var a=s(74848);function l({title:e,description:n,imagePath:s}){return(0,a.jsxs)("div",{className:o,style:{backgroundImage:`url(${s})`},children:[(0,a.jsx)("div",{className:t}),(0,a.jsxs)("div",{className:r,children:[(0,a.jsx)("h1",{className:i,children:e}),(0,a.jsx)("p",{className:c,children:n})]})]})}},84542(e,n,s){s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"tooling/syncoor","title":"Syncoor","description":"<ToolHeroBanner","source":"@site/docs/tooling/syncoor.md","sourceDirName":"tooling","slug":"/tooling/syncoor","permalink":"/docs/tooling/syncoor","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":22,"frontMatter":{"sidebar_position":22,"title":"Syncoor","hide_title":true},"sidebar":"docs","previous":{"title":"Spamoor","permalink":"/docs/tooling/spamoor"},"next":{"title":"Proofessoor","permalink":"/docs/tooling/proofessoor"}}');var t=s(74848),r=s(28453),i=s(59951);const c={sidebar_position:22,title:"Syncoor",hide_title:!0},a=void 0,l={},d=[{value:"Overview",id:"overview",level:2},{value:"Features",id:"features",level:2},{value:"Use Cases",id:"use-cases",level:2}];function h(e){const n={h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{RelatedLinks:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("RelatedLinks",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.A,{title:"Syncoor",description:"Ethereum synchronization testing platform that orchestrates, monitors, and visualizes client sync performance.",imagePath:"/img/tools/syncoor.jpg"}),"\n",(0,t.jsx)(s,{githubRepo:"ethpandaops/syncoor",links:[{url:"https://syncoor.perf-devnet-2.ethpandaops.io/",name:"Example: Hoodi Syncoor Dashboard"}]}),"\n",(0,t.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(n.p,{children:"Syncoor displays blockchain sync progress charts, peer connections, disk usage metrics, and detailed test results for various combinations of execution and consensus clients. The tool consists of a Go-based backend server that collects synchronization data and a TypeScript web interface for visualization and analysis. The tool leverages the ethereum package (Kurtosis) for containerized Ethereum network orchestration."}),"\n",(0,t.jsx)(n.h2,{id:"features",children:"Features"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Synchronization Visualization"}),": Progress charts showing sync status across different client combinations"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Peer Connection Monitoring"}),": Track and analyze peer connections during synchronization"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Disk Usage Tracking"}),": Monitor resource consumption during sync operations"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Comparative Performance Results"}),": Compare different client combinations side-by-side"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Web Dashboard"}),": Interactive interface for data analysis and exploration"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"use-cases",children:"Use Cases"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Performance Benchmarking"}),": Evaluate sync performance across different Ethereum clients"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Infrastru
1cture Planning"}),": Understand resource requirements for different client combinations"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Client Testing"}),": Validate synchronization behavior during development"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Network Monitoring"}),": Track sync health across test networks"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Research & Analysis"}),": Study synchronization patterns and bottlenecks"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}}}]);
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.