@@ -85,13 +85,31 @@ impl TryFrom<&Path> for Genesis {
8585 warn ! ( "Invalid fork, only post-merge networks are supported." ) ;
8686 }
8787
88+ if genesis. config . bpo1_time . is_some ( ) && genesis. config . blob_schedule . bpo1 . is_none ( )
89+ || genesis. config . bpo2_time . is_some ( ) && genesis. config . blob_schedule . bpo2 . is_none ( )
90+ || genesis. config . bpo3_time . is_some ( ) && genesis. config . blob_schedule . bpo3 . is_none ( )
91+ || genesis. config . bpo4_time . is_some ( ) && genesis. config . blob_schedule . bpo4 . is_none ( )
92+ || genesis. config . bpo5_time . is_some ( ) && genesis. config . blob_schedule . bpo5 . is_none ( )
93+ {
94+ warn ! ( "BPO time set but no BPO BlobSchedule found in ChainConfig" )
95+ }
96+
8897 Ok ( genesis)
8998 }
9099}
91100
92101#[ allow( unused) ]
93102#[ derive(
94- Clone , Copy , Debug , Serialize , Deserialize , PartialEq , RSerialize , RDeserialize , Archive ,
103+ Clone ,
104+ Copy ,
105+ Debug ,
106+ Serialize ,
107+ Deserialize ,
108+ PartialEq ,
109+ RSerialize ,
110+ RDeserialize ,
111+ Archive ,
112+ Default ,
95113) ]
96114#[ serde( rename_all = "camelCase" ) ]
97115pub struct ForkBlobSchedule {
@@ -110,13 +128,31 @@ pub struct BlobSchedule {
110128 pub cancun : ForkBlobSchedule ,
111129 #[ serde( default = "default_prague_schedule" ) ]
112130 pub prague : ForkBlobSchedule ,
131+ #[ serde( default = "default_osaka_schedule" ) ]
132+ pub osaka : ForkBlobSchedule ,
133+ #[ serde( default , skip_serializing_if = "Option::is_none" ) ]
134+ pub bpo1 : Option < ForkBlobSchedule > ,
135+ #[ serde( default , skip_serializing_if = "Option::is_none" ) ]
136+ pub bpo2 : Option < ForkBlobSchedule > ,
137+ #[ serde( default , skip_serializing_if = "Option::is_none" ) ]
138+ pub bpo3 : Option < ForkBlobSchedule > ,
139+ #[ serde( default , skip_serializing_if = "Option::is_none" ) ]
140+ pub bpo4 : Option < ForkBlobSchedule > ,
141+ #[ serde( default , skip_serializing_if = "Option::is_none" ) ]
142+ pub bpo5 : Option < ForkBlobSchedule > ,
113143}
114144
115145impl Default for BlobSchedule {
116146 fn default ( ) -> Self {
117147 BlobSchedule {
118148 cancun : default_cancun_schedule ( ) ,
119149 prague : default_prague_schedule ( ) ,
150+ osaka : default_osaka_schedule ( ) ,
151+ bpo1 : None ,
152+ bpo2 : None ,
153+ bpo3 : None ,
154+ bpo4 : None ,
155+ bpo5 : None ,
120156 }
121157 }
122158}
@@ -137,6 +173,14 @@ fn default_prague_schedule() -> ForkBlobSchedule {
137173 }
138174}
139175
176+ fn default_osaka_schedule ( ) -> ForkBlobSchedule {
177+ ForkBlobSchedule {
178+ target : 6 ,
179+ max : 9 ,
180+ base_fee_update_fraction : 5007716 ,
181+ }
182+ }
183+
140184/// Blockchain settings defined per block
141185#[ allow( unused) ]
142186#[ derive(
@@ -276,6 +320,26 @@ impl From<Fork> for &str {
276320}
277321
278322impl ChainConfig {
323+ pub fn is_bpo1_activated ( & self , block_timestamp : u64 ) -> bool {
324+ self . bpo1_time . is_some_and ( |time| time <= block_timestamp)
325+ }
326+
327+ pub fn is_bpo2_activated ( & self , block_timestamp : u64 ) -> bool {
328+ self . bpo2_time . is_some_and ( |time| time <= block_timestamp)
329+ }
330+
331+ pub fn is_bpo3_activated ( & self , block_timestamp : u64 ) -> bool {
332+ self . bpo3_time . is_some_and ( |time| time <= block_timestamp)
333+ }
334+
335+ pub fn is_bpo4_activated ( & self , block_timestamp : u64 ) -> bool {
336+ self . bpo4_time . is_some_and ( |time| time <= block_timestamp)
337+ }
338+
339+ pub fn is_bpo5_activated ( & self , block_timestamp : u64 ) -> bool {
340+ self . bpo5_time . is_some_and ( |time| time <= block_timestamp)
341+ }
342+
279343 pub fn is_osaka_activated ( & self , block_timestamp : u64 ) -> bool {
280344 self . osaka_time . is_some_and ( |time| time <= block_timestamp)
281345 }
@@ -348,7 +412,19 @@ impl ChainConfig {
348412 }
349413
350414 pub fn get_fork_blob_schedule ( & self , block_timestamp : u64 ) -> Option < ForkBlobSchedule > {
351- if self . is_prague_activated ( block_timestamp) {
415+ if self . is_bpo5_activated ( block_timestamp) {
416+ Some ( self . blob_schedule . bpo5 . unwrap_or_default ( ) )
417+ } else if self . is_bpo4_activated ( block_timestamp) {
418+ Some ( self . blob_schedule . bpo4 . unwrap_or_default ( ) )
419+ } else if self . is_bpo3_activated ( block_timestamp) {
420+ Some ( self . blob_schedule . bpo3 . unwrap_or_default ( ) )
421+ } else if self . is_bpo2_activated ( block_timestamp) {
422+ Some ( self . blob_schedule . bpo2 . unwrap_or_default ( ) )
423+ } else if self . is_bpo1_activated ( block_timestamp) {
424+ Some ( self . blob_schedule . bpo1 . unwrap_or_default ( ) )
425+ } else if self . is_osaka_activated ( block_timestamp) {
426+ Some ( self . blob_schedule . osaka )
427+ } else if self . is_prague_activated ( block_timestamp) {
352428 Some ( self . blob_schedule . prague )
353429 } else if self . is_cancun_activated ( block_timestamp) {
354430 Some ( self . blob_schedule . cancun )
@@ -559,6 +635,7 @@ mod tests {
559635 max : 4 ,
560636 base_fee_update_fraction : 13353908 ,
561637 } ,
638+ ..Default :: default ( )
562639 } ,
563640 ..Default :: default ( )
564641 } ;
@@ -734,6 +811,7 @@ mod tests {
734811 max : 4 ,
735812 base_fee_update_fraction : 20000 ,
736813 } ,
814+ ..Default :: default ( )
737815 } ,
738816 deposit_contract_address : H160 :: from_str ( "0x4242424242424242424242424242424242424242" )
739817 . unwrap ( ) ,
@@ -766,6 +844,7 @@ mod tests {
766844 max : 9 ,
767845 base_fee_update_fraction : 5007716 ,
768846 } ,
847+ ..Default :: default ( )
769848 } ,
770849 deposit_contract_address : H160 :: from_str ( "0x4242424242424242424242424242424242424242" )
771850 . unwrap ( ) ,
@@ -805,6 +884,7 @@ mod tests {
805884 max : 4 ,
806885 base_fee_update_fraction : 20000 ,
807886 } ,
887+ ..Default :: default ( )
808888 } ,
809889 deposit_contract_address : H160 :: from_str ( "0x4242424242424242424242424242424242424242" )
810890 . unwrap ( ) ,
@@ -844,6 +924,7 @@ mod tests {
844924 max : 9 ,
845925 base_fee_update_fraction : 5007716 ,
846926 } ,
927+ ..Default :: default ( )
847928 } ,
848929 deposit_contract_address : H160 :: from_str ( "0x4242424242424242424242424242424242424242" )
849930 . unwrap ( ) ,
0 commit comments