@@ -34,13 +34,13 @@ pub enum Chain {
3434 Mainnet ,
3535 Holesky ,
3636 Sepolia ,
37- Helder ,
3837 Hoodi ,
3938 Custom {
4039 genesis_time_secs : u64 ,
4140 slot_time_secs : u64 ,
4241 genesis_fork_version : ForkVersion ,
4342 fulu_fork_slot : u64 ,
43+ chain_id : u64 ,
4444 } ,
4545}
4646
@@ -69,7 +69,7 @@ pub type ForkVersion = [u8; 4];
6969impl std:: fmt:: Display for Chain {
7070 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
7171 match self {
72- Self :: Mainnet | Self :: Holesky | Self :: Sepolia | Self :: Helder | Self :: Hoodi => {
72+ Self :: Mainnet | Self :: Holesky | Self :: Sepolia | Self :: Hoodi => {
7373 write ! ( f, "{self:?}" )
7474 }
7575 Self :: Custom { .. } => write ! ( f, "Custom" ) ,
@@ -83,19 +83,20 @@ impl std::fmt::Debug for Chain {
8383 Self :: Mainnet => write ! ( f, "Mainnet" ) ,
8484 Self :: Holesky => write ! ( f, "Holesky" ) ,
8585 Self :: Sepolia => write ! ( f, "Sepolia" ) ,
86- Self :: Helder => write ! ( f, "Helder" ) ,
8786 Self :: Hoodi => write ! ( f, "Hoodi" ) ,
8887 Self :: Custom {
8988 genesis_time_secs,
9089 slot_time_secs,
9190 genesis_fork_version,
9291 fulu_fork_slot,
92+ chain_id,
9393 } => f
9494 . debug_struct ( "Custom" )
9595 . field ( "genesis_time_secs" , genesis_time_secs)
9696 . field ( "slot_time_secs" , slot_time_secs)
9797 . field ( "genesis_fork_version" , & hex:: encode_prefixed ( genesis_fork_version) )
9898 . field ( "fulu_fork_slot" , fulu_fork_slot)
99+ . field ( "chain_id" , chain_id)
99100 . finish ( ) ,
100101 }
101102 }
@@ -107,11 +108,8 @@ impl Chain {
107108 Chain :: Mainnet => KnownChain :: Mainnet . id ( ) ,
108109 Chain :: Holesky => KnownChain :: Holesky . id ( ) ,
109110 Chain :: Sepolia => KnownChain :: Sepolia . id ( ) ,
110- Chain :: Helder => KnownChain :: Helder . id ( ) ,
111111 Chain :: Hoodi => KnownChain :: Hoodi . id ( ) ,
112- Chain :: Custom { .. } => {
113- unimplemented ! ( "chain id is not supported on custom chains, please file an issue" )
114- }
112+ Chain :: Custom { chain_id, .. } => * chain_id,
115113 }
116114 }
117115
@@ -120,7 +118,6 @@ impl Chain {
120118 Chain :: Mainnet => KnownChain :: Mainnet . builder_domain ( ) ,
121119 Chain :: Holesky => KnownChain :: Holesky . builder_domain ( ) ,
122120 Chain :: Sepolia => KnownChain :: Sepolia . builder_domain ( ) ,
123- Chain :: Helder => KnownChain :: Helder . builder_domain ( ) ,
124121 Chain :: Hoodi => KnownChain :: Hoodi . builder_domain ( ) ,
125122 Chain :: Custom { .. } => compute_domain ( * self , APPLICATION_BUILDER_DOMAIN ) ,
126123 }
@@ -131,7 +128,6 @@ impl Chain {
131128 Chain :: Mainnet => KnownChain :: Mainnet . genesis_fork_version ( ) ,
132129 Chain :: Holesky => KnownChain :: Holesky . genesis_fork_version ( ) ,
133130 Chain :: Sepolia => KnownChain :: Sepolia . genesis_fork_version ( ) ,
134- Chain :: Helder => KnownChain :: Helder . genesis_fork_version ( ) ,
135131 Chain :: Hoodi => KnownChain :: Hoodi . genesis_fork_version ( ) ,
136132 Chain :: Custom { genesis_fork_version, .. } => * genesis_fork_version,
137133 }
@@ -142,7 +138,6 @@ impl Chain {
142138 Chain :: Mainnet => KnownChain :: Mainnet . genesis_time_sec ( ) ,
143139 Chain :: Holesky => KnownChain :: Holesky . genesis_time_sec ( ) ,
144140 Chain :: Sepolia => KnownChain :: Sepolia . genesis_time_sec ( ) ,
145- Chain :: Helder => KnownChain :: Helder . genesis_time_sec ( ) ,
146141 Chain :: Hoodi => KnownChain :: Hoodi . genesis_time_sec ( ) ,
147142 Chain :: Custom { genesis_time_secs, .. } => * genesis_time_secs,
148143 }
@@ -153,7 +148,6 @@ impl Chain {
153148 Chain :: Mainnet => KnownChain :: Mainnet . slot_time_sec ( ) ,
154149 Chain :: Holesky => KnownChain :: Holesky . slot_time_sec ( ) ,
155150 Chain :: Sepolia => KnownChain :: Sepolia . slot_time_sec ( ) ,
156- Chain :: Helder => KnownChain :: Helder . slot_time_sec ( ) ,
157151 Chain :: Hoodi => KnownChain :: Hoodi . slot_time_sec ( ) ,
158152 Chain :: Custom { slot_time_secs, .. } => * slot_time_secs,
159153 }
@@ -164,7 +158,6 @@ impl Chain {
164158 Chain :: Mainnet => KnownChain :: Mainnet . fulu_fork_slot ( ) ,
165159 Chain :: Holesky => KnownChain :: Holesky . fulu_fork_slot ( ) ,
166160 Chain :: Sepolia => KnownChain :: Sepolia . fulu_fork_slot ( ) ,
167- Chain :: Helder => KnownChain :: Helder . fulu_fork_slot ( ) ,
168161 Chain :: Hoodi => KnownChain :: Hoodi . fulu_fork_slot ( ) ,
169162 Chain :: Custom { slot_time_secs, .. } => * slot_time_secs,
170163 }
@@ -183,8 +176,6 @@ pub enum KnownChain {
183176 Holesky ,
184177 #[ serde( alias = "sepolia" ) ]
185178 Sepolia ,
186- #[ serde( alias = "helder" ) ]
187- Helder ,
188179 #[ serde( alias = "hoodi" ) ]
189180 Hoodi ,
190181}
@@ -196,7 +187,6 @@ impl KnownChain {
196187 KnownChain :: Mainnet => 1 ,
197188 KnownChain :: Holesky => 17000 ,
198189 KnownChain :: Sepolia => 11155111 ,
199- KnownChain :: Helder => 167000 ,
200190 KnownChain :: Hoodi => 560048 ,
201191 }
202192 }
@@ -212,9 +202,6 @@ impl KnownChain {
212202 KnownChain :: Sepolia => {
213203 b256 ! ( "0x00000001d3010778cd08ee514b08fe67b6c503b510987a4ce43f42306d97c67c" )
214204 }
215- KnownChain :: Helder => {
216- b256 ! ( "0x0000000194c41af484fff7964969e0bdd922f82dff0f4be87a60d0664cc9d1ff" )
217- }
218205 KnownChain :: Hoodi => {
219206 b256 ! ( "0x00000001719103511efa4f1362ff2a50996cccf329cc84cb410c5e5c7d351d03" )
220207 }
@@ -226,7 +213,6 @@ impl KnownChain {
226213 KnownChain :: Mainnet => hex ! ( "00000000" ) ,
227214 KnownChain :: Holesky => hex ! ( "01017000" ) ,
228215 KnownChain :: Sepolia => hex ! ( "90000069" ) ,
229- KnownChain :: Helder => hex ! ( "10000000" ) ,
230216 KnownChain :: Hoodi => hex ! ( "10000910" ) ,
231217 }
232218 }
@@ -236,7 +222,6 @@ impl KnownChain {
236222 KnownChain :: Mainnet => 1606824023 ,
237223 KnownChain :: Holesky => 1695902400 ,
238224 KnownChain :: Sepolia => 1655733600 ,
239- KnownChain :: Helder => 1718967660 ,
240225 KnownChain :: Hoodi => 1742213400 ,
241226 }
242227 }
@@ -246,15 +231,13 @@ impl KnownChain {
246231 KnownChain :: Mainnet |
247232 KnownChain :: Holesky |
248233 KnownChain :: Sepolia |
249- KnownChain :: Helder |
250234 KnownChain :: Hoodi => 12 ,
251235 }
252236 }
253237
254238 pub fn fulu_fork_slot ( & self ) -> u64 {
255239 match self {
256240 KnownChain :: Mainnet => 13164544 ,
257- KnownChain :: Helder => u64:: MAX ,
258241 KnownChain :: Holesky => 5283840 ,
259242 KnownChain :: Sepolia => 8724480 ,
260243 KnownChain :: Hoodi => 1622016 ,
@@ -268,7 +251,6 @@ impl From<KnownChain> for Chain {
268251 KnownChain :: Mainnet => Chain :: Mainnet ,
269252 KnownChain :: Holesky => Chain :: Holesky ,
270253 KnownChain :: Sepolia => Chain :: Sepolia ,
271- KnownChain :: Helder => Chain :: Helder ,
272254 KnownChain :: Hoodi => Chain :: Hoodi ,
273255 }
274256 }
@@ -291,6 +273,7 @@ pub enum ChainLoader {
291273 slot_time_secs : u64 ,
292274 genesis_fork_version : Bytes ,
293275 fulu_fork_slot : u64 ,
276+ chain_id : u64 ,
294277 } ,
295278}
296279
@@ -303,18 +286,19 @@ impl Serialize for Chain {
303286 Chain :: Mainnet => ChainLoader :: Known ( KnownChain :: Mainnet ) ,
304287 Chain :: Holesky => ChainLoader :: Known ( KnownChain :: Holesky ) ,
305288 Chain :: Sepolia => ChainLoader :: Known ( KnownChain :: Sepolia ) ,
306- Chain :: Helder => ChainLoader :: Known ( KnownChain :: Helder ) ,
307289 Chain :: Hoodi => ChainLoader :: Known ( KnownChain :: Hoodi ) ,
308290 Chain :: Custom {
309291 genesis_time_secs,
310292 slot_time_secs,
311293 genesis_fork_version,
312294 fulu_fork_slot,
295+ chain_id,
313296 } => ChainLoader :: Custom {
314297 genesis_time_secs : * genesis_time_secs,
315298 slot_time_secs : * slot_time_secs,
316299 genesis_fork_version : Bytes :: from ( * genesis_fork_version) ,
317300 fulu_fork_slot : * fulu_fork_slot,
301+ chain_id : * chain_id,
318302 } ,
319303 } ;
320304
@@ -332,20 +316,22 @@ impl<'de> Deserialize<'de> for Chain {
332316 match loader {
333317 ChainLoader :: Known ( known) => Ok ( Chain :: from ( known) ) ,
334318 ChainLoader :: Path { genesis_time_secs, path } => {
335- let ( slot_time_secs, genesis_fork_version, fulu_fork_slot) =
319+ let ( slot_time_secs, genesis_fork_version, fulu_fork_slot, chain_id ) =
336320 load_chain_from_file ( path) . map_err ( serde:: de:: Error :: custom) ?;
337321 Ok ( Chain :: Custom {
338322 genesis_time_secs,
339323 slot_time_secs,
340324 genesis_fork_version,
341325 fulu_fork_slot,
326+ chain_id,
342327 } )
343328 }
344329 ChainLoader :: Custom {
345330 genesis_time_secs,
346331 slot_time_secs,
347332 genesis_fork_version,
348333 fulu_fork_slot,
334+ chain_id,
349335 } => {
350336 let genesis_fork_version: ForkVersion =
351337 genesis_fork_version. as_ref ( ) . try_into ( ) . map_err ( serde:: de:: Error :: custom) ?;
@@ -354,6 +340,7 @@ impl<'de> Deserialize<'de> for Chain {
354340 slot_time_secs,
355341 genesis_fork_version,
356342 fulu_fork_slot,
343+ chain_id,
357344 } )
358345 }
359346 }
@@ -366,7 +353,7 @@ impl<'de> Deserialize<'de> for Chain {
366353/// - JSON as return the getSpec endpoint, either with or without the `data`
367354/// field
368355/// - YAML as used e.g. in Kurtosis/Ethereum Package
369- pub fn load_chain_from_file ( path : PathBuf ) -> eyre:: Result < ( u64 , ForkVersion , u64 ) > {
356+ pub fn load_chain_from_file ( path : PathBuf ) -> eyre:: Result < ( u64 , ForkVersion , u64 , u64 ) > {
370357 #[ derive( Deserialize ) ]
371358 #[ serde( rename_all = "UPPERCASE" ) ]
372359 struct QuotedSpecFile {
@@ -377,14 +364,16 @@ pub fn load_chain_from_file(path: PathBuf) -> eyre::Result<(u64, ForkVersion, u6
377364 slots_per_epoch : u64 ,
378365 #[ serde( with = "serde_utils::quoted_u64" ) ]
379366 fulu_fork_epoch : u64 ,
367+ #[ serde( with = "serde_utils::quoted_u64" ) ]
368+ deposit_chain_id : u64 ,
380369 }
381370
382371 impl QuotedSpecFile {
383- fn to_chain ( & self ) -> eyre:: Result < ( u64 , ForkVersion , u64 ) > {
372+ fn to_chain ( & self ) -> eyre:: Result < ( u64 , ForkVersion , u64 , u64 ) > {
384373 let genesis_fork_version: ForkVersion =
385374 self . genesis_fork_version . as_ref ( ) . try_into ( ) ?;
386375 let fulu_fork_slot = self . fulu_fork_epoch . saturating_mul ( self . slots_per_epoch ) ;
387- Ok ( ( self . seconds_per_slot , genesis_fork_version, fulu_fork_slot) )
376+ Ok ( ( self . seconds_per_slot , genesis_fork_version, fulu_fork_slot, self . deposit_chain_id ) )
388377 }
389378 }
390379
@@ -400,14 +389,15 @@ pub fn load_chain_from_file(path: PathBuf) -> eyre::Result<(u64, ForkVersion, u6
400389 genesis_fork_version : u32 ,
401390 slots_per_epoch : Option < u64 > ,
402391 fulu_fork_epoch : u64 ,
392+ deposit_chain_id : u64 ,
403393 }
404394
405395 impl SpecFile {
406- fn to_chain ( & self ) -> ( u64 , ForkVersion , u64 ) {
396+ fn to_chain ( & self ) -> ( u64 , ForkVersion , u64 , u64 ) {
407397 let genesis_fork_version: ForkVersion = self . genesis_fork_version . to_be_bytes ( ) ;
408398 let fulu_fork_slot =
409399 self . fulu_fork_epoch . saturating_mul ( self . slots_per_epoch . unwrap_or ( 32 ) ) ;
410- ( self . seconds_per_slot , genesis_fork_version, fulu_fork_slot)
400+ ( self . seconds_per_slot , genesis_fork_version, fulu_fork_slot, self . deposit_chain_id )
411401 }
412402 }
413403
@@ -443,13 +433,14 @@ mod tests {
443433
444434 #[ test]
445435 fn test_load_custom ( ) {
446- let s = r#"chain = { genesis_time_secs = 1, slot_time_secs = 2, genesis_fork_version = "0x01000000", fulu_fork_slot = 1 }"# ;
436+ let s = r#"chain = { genesis_time_secs = 1, slot_time_secs = 2, genesis_fork_version = "0x01000000", fulu_fork_slot = 1, chain_id = 123 }"# ;
447437 let decoded: MockConfig = toml:: from_str ( s) . unwrap ( ) ;
448438 assert_eq ! ( decoded. chain, Chain :: Custom {
449439 genesis_time_secs: 1 ,
450440 slot_time_secs: 2 ,
451441 genesis_fork_version: [ 1 , 0 , 0 , 0 ] ,
452- fulu_fork_slot: 1
442+ fulu_fork_slot: 1 ,
443+ chain_id: 123 ,
453444 } )
454445 }
455446
@@ -492,6 +483,7 @@ mod tests {
492483 slot_time_secs: KnownChain :: Holesky . slot_time_sec( ) ,
493484 genesis_fork_version: KnownChain :: Holesky . genesis_fork_version( ) ,
494485 fulu_fork_slot: KnownChain :: Holesky . fulu_fork_slot( ) ,
486+ chain_id: KnownChain :: Holesky . id( ) ,
495487 } )
496488 }
497489
@@ -507,12 +499,13 @@ mod tests {
507499 let s = format ! ( "chain = {{ genesis_time_secs = 1, path = {path:?}}}" ) ;
508500
509501 let decoded: MockConfig = toml:: from_str ( & s) . unwrap ( ) ;
510- assert_eq ! ( decoded. chain. slot_time_sec( ) , KnownChain :: Helder . slot_time_sec( ) ) ;
502+ assert_eq ! ( decoded. chain. slot_time_sec( ) , KnownChain :: Sepolia . slot_time_sec( ) ) ;
511503 assert_eq ! ( decoded. chain, Chain :: Custom {
512504 genesis_time_secs: 1 ,
513505 slot_time_secs: KnownChain :: Sepolia . slot_time_sec( ) ,
514506 genesis_fork_version: KnownChain :: Sepolia . genesis_fork_version( ) ,
515507 fulu_fork_slot: KnownChain :: Sepolia . fulu_fork_slot( ) ,
508+ chain_id: KnownChain :: Sepolia . id( ) ,
516509 } )
517510 }
518511
@@ -534,27 +527,7 @@ mod tests {
534527 slot_time_secs: KnownChain :: Hoodi . slot_time_sec( ) ,
535528 genesis_fork_version: KnownChain :: Hoodi . genesis_fork_version( ) ,
536529 fulu_fork_slot: KnownChain :: Hoodi . fulu_fork_slot( ) ,
537- } )
538- }
539-
540- #[ test]
541- fn test_spec_helder_yml ( ) {
542- let a = env ! ( "CARGO_MANIFEST_DIR" ) ;
543- let mut path = PathBuf :: from ( a) ;
544-
545- path. pop ( ) ;
546- path. pop ( ) ;
547- path. push ( "tests/data/helder_spec.yml" ) ;
548-
549- let s = format ! ( "chain = {{ genesis_time_secs = 1, path = {path:?}}}" ) ;
550-
551- let decoded: MockConfig = toml:: from_str ( & s) . unwrap ( ) ;
552- assert_eq ! ( decoded. chain. slot_time_sec( ) , KnownChain :: Helder . slot_time_sec( ) ) ;
553- assert_eq ! ( decoded. chain, Chain :: Custom {
554- genesis_time_secs: 1 ,
555- slot_time_secs: KnownChain :: Helder . slot_time_sec( ) ,
556- genesis_fork_version: KnownChain :: Helder . genesis_fork_version( ) ,
557- fulu_fork_slot: KnownChain :: Helder . fulu_fork_slot( ) ,
530+ chain_id: KnownChain :: Hoodi . id( ) ,
558531 } )
559532 }
560533}
0 commit comments