@@ -412,6 +412,39 @@ void system_call(State& state, const BlockInfo& block, evmc_revision rev, evmc::
412
412
}
413
413
}
414
414
}
415
+
416
+ static constexpr auto HISTORY_STORAGE_ADDRESS =
417
+ 0x0aae40965e6800cd9b1f4b05ff21581047e3f91e_address;
418
+ if (rev >= EVMC_PRAGUE)
419
+ {
420
+ if (const auto acc = state.find (HISTORY_STORAGE_ADDRESS);
421
+ acc != nullptr && !block.known_block_hashes .empty ())
422
+ {
423
+ const auto parent_block_hash = block.known_block_hashes .at (block.number - 1 );
424
+ const evmc_message msg{
425
+ .kind = EVMC_CALL,
426
+ .gas = 30'000'000 ,
427
+ .recipient = HISTORY_STORAGE_ADDRESS,
428
+ .sender = SystemAddress,
429
+ .input_data = parent_block_hash.bytes ,
430
+ .input_size = sizeof (parent_block_hash),
431
+ };
432
+
433
+ const Transaction empty_tx{};
434
+ Host host{rev, vm, state, block, empty_tx};
435
+ const auto & code = acc->code ;
436
+ [[maybe_unused]] const auto res = vm.execute (host, rev, msg, code.data (), code.size ());
437
+ assert (res.status_code == EVMC_SUCCESS);
438
+ assert (acc->access_status == EVMC_ACCESS_COLD);
439
+
440
+ // Reset storage status.
441
+ for (auto & [_, val] : acc->storage )
442
+ {
443
+ val.access_status = EVMC_ACCESS_COLD;
444
+ val.original = val.current ;
445
+ }
446
+ }
447
+ }
415
448
}
416
449
417
450
void finalize (State& state, evmc_revision rev, const address& coinbase,
0 commit comments