@@ -276,3 +276,35 @@ async fn test_fork_load_state_with_greater_state_block() {
276
276
277
277
assert_eq ! ( new_block_number, block_number) ;
278
278
}
279
+
280
+ // <https://github.com/foundry-rs/foundry/issues/10488>
281
+ #[ tokio:: test( flavor = "multi_thread" ) ]
282
+ async fn computes_next_base_fee_after_loading_state ( ) {
283
+ let tmp = tempfile:: tempdir ( ) . unwrap ( ) ;
284
+ let state_file = tmp. path ( ) . join ( "state.json" ) ;
285
+
286
+ let ( api, handle) = spawn ( NodeConfig :: test ( ) ) . await ;
287
+
288
+ let bob = address ! ( "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" ) ;
289
+ let alice = address ! ( "0x9276449EaC5b4f7Bc17cFC6700f7BeeB86F9bCd0" ) ;
290
+
291
+ let provider = handle. http_provider ( ) ;
292
+
293
+ let value = Unit :: ETHER . wei ( ) . saturating_mul ( U256 :: from ( 1 ) ) ; // 1 ether
294
+ let tx = TransactionRequest :: default ( ) . with_to ( alice) . with_value ( value) . with_from ( bob) ;
295
+ let tx = WithOtherFields :: new ( tx) ;
296
+
297
+ let base_fee_empty_chain = api. backend . fees ( ) . base_fee ( ) ;
298
+ provider. send_transaction ( tx) . await . unwrap ( ) . get_receipt ( ) . await . unwrap ( ) ;
299
+
300
+ let base_fee_after_one_tx = api. backend . fees ( ) . base_fee ( ) ;
301
+ // the test is meaningless if this does not hold
302
+ assert ! ( base_fee_empty_chain != base_fee_after_one_tx) ;
303
+
304
+ let ser_state = api. serialized_state ( true ) . await . unwrap ( ) ;
305
+ foundry_common:: fs:: write_json_file ( & state_file, & ser_state) . unwrap ( ) ;
306
+
307
+ let ( api, _handle) = spawn ( NodeConfig :: test ( ) . with_init_state_path ( state_file) ) . await ;
308
+ let base_fee_after_reload = api. backend . fees ( ) . base_fee ( ) ;
309
+ assert_eq ! ( base_fee_after_reload, base_fee_after_one_tx) ;
310
+ }
0 commit comments