@@ -6,13 +6,13 @@ import { Header } from '@/components/Layout/Header';
66import { Tab } from '@/components/Navigation/Tab' ;
77import { ScrollableTabs } from '@/components/Navigation/ScrollableTabs' ;
88import { Alert } from '@/components/Feedback/Alert' ;
9- import { Dialog } from '@/components/Overlays/Dialog' ;
109import { Checkbox } from '@/components/Forms/Checkbox' ;
1110import { useTabState } from '@/hooks/useTabState' ;
1211import { useEngineTimingsData } from './hooks/useEngineTimingsData' ;
1312import { TimingsSkeleton } from './components/TimingsSkeleton' ;
1413import { NewPayloadTab } from './components/NewPayloadTab' ;
1514import { GetBlobsTab } from './components/GetBlobsTab' ;
15+ import { ReferenceNodesInfoDialog } from './components/ReferenceNodesInfoDialog' ;
1616import type { TimeRange } from './IndexPage.types' ;
1717
1818/**
@@ -116,77 +116,7 @@ export function IndexPage(): JSX.Element {
116116 </ div >
117117
118118 { /* Reference Node Info Dialog */ }
119- < Dialog open = { showRefNodeInfo } onClose = { ( ) => setShowRefNodeInfo ( false ) } title = "About Reference Nodes" size = "lg" >
120- < div className = "space-y-4 text-sm leading-relaxed text-muted" >
121- < p >
122- < span className = "font-medium text-foreground" >
123- Reference nodes are controlled by ethPandaOps and follow EIP-7870 hardware specifications.
124- </ span > { ' ' }
125- This EIP establishes standardized hardware and bandwidth recommendations to ensure consistent, meaningful
126- benchmark comparisons across the Ethereum network.
127- </ p >
128- < p >
129- EIP-7870 defines three node types with specific requirements: Full Nodes for chain following, Attesters for
130- validators, and Local Block Builders for block proposal. Each has distinct hardware and bandwidth needs.
131- </ p >
132- < div className = "overflow-x-auto" >
133- < table className = "w-full text-left text-xs" >
134- < thead >
135- < tr className = "border-b border-border" >
136- < th className = "py-2 pr-4 font-medium text-foreground" > Node Type</ th >
137- < th className = "py-2 pr-4 font-medium text-foreground" > RAM</ th >
138- < th className = "py-2 pr-4 font-medium text-foreground" > CPU</ th >
139- < th className = "py-2 font-medium text-foreground" > Bandwidth</ th >
140- </ tr >
141- </ thead >
142- < tbody className = "text-muted" >
143- < tr className = "border-b border-border/50" >
144- < td className = "py-2 pr-4" > Full Node</ td >
145- < td className = "py-2 pr-4" > 32 GB</ td >
146- < td className = "py-2 pr-4" > 4c/8t</ td >
147- < td className = "py-2" > 50/15 Mbps</ td >
148- </ tr >
149- < tr className = "border-b border-border/50" >
150- < td className = "py-2 pr-4" > Attester</ td >
151- < td className = "py-2 pr-4" > 64 GB</ td >
152- < td className = "py-2 pr-4" > 8c/16t</ td >
153- < td className = "py-2" > 50/25 Mbps</ td >
154- </ tr >
155- < tr >
156- < td className = "py-2 pr-4" > Local Block Builder</ td >
157- < td className = "py-2 pr-4" > 64 GB</ td >
158- < td className = "py-2 pr-4" > 8c/16t</ td >
159- < td className = "py-2" > 100/50 Mbps</ td >
160- </ tr >
161- </ tbody >
162- </ table >
163- </ div >
164- < div className = "rounded-sm border border-accent/20 bg-accent/5 p-3" >
165- < p className = "text-foreground" >
166- < span className = "font-medium" > Why filter by reference nodes?</ span > { ' ' }
167- < span className = "italic" >
168- This ensures timing data reflects consistent, spec-compliant hardware rather than varied community
169- setups.
170- </ span >
171- </ p >
172- </ div >
173- < p >
174- All reference nodes use 4 TB NVMe storage. By filtering to reference nodes, you see Engine API performance
175- on standardized infrastructure, making it easier to identify client-specific behavior versus
176- hardware-related variance.
177- </ p >
178- < p className = "text-xs" >
179- < a
180- href = "https://eips.ethereum.org/EIPS/eip-7870"
181- target = "_blank"
182- rel = "noopener noreferrer"
183- className = "text-accent hover:underline"
184- >
185- Read EIP-7870 specification
186- </ a >
187- </ p >
188- </ div >
189- </ Dialog >
119+ < ReferenceNodesInfoDialog open = { showRefNodeInfo } onClose = { ( ) => setShowRefNodeInfo ( false ) } />
190120
191121 { /* Tabbed Content */ }
192122 < TabGroup selectedIndex = { selectedIndex } onChange = { onChange } >
0 commit comments