radix_engine/updates/
eagle_ray.rs1use super::*;
2use crate::{internal_prelude::*, system::system_callback::SystemBoot};
3
4#[derive(Clone, ScryptoSbor)]
5pub struct EagleRaySettings {
6 pub system_version_update: UpdateSetting<NoSettings>,
7}
8
9impl UpdateSettings for EagleRaySettings {
10 type UpdateGenerator = EagleRayGenerator;
11
12 fn protocol_version() -> ProtocolVersion {
13 ProtocolVersion::EagleRay
14 }
15
16 fn all_enabled_as_default_for_network(network: &NetworkDefinition) -> Self {
17 Self {
18 system_version_update: UpdateSetting::enabled_as_default_for_network(network),
19 }
20 }
21
22 fn all_disabled() -> Self {
23 Self {
24 system_version_update: UpdateSetting::Disabled,
25 }
26 }
27
28 fn create_generator(&self) -> Self::UpdateGenerator {
29 Self::UpdateGenerator {
30 settings: self.clone(),
31 }
32 }
33}
34
35pub struct EagleRayGenerator {
36 settings: EagleRaySettings,
37}
38
39impl ProtocolUpdateGenerator for EagleRayGenerator {
40 fn batch_groups(&self) -> Vec<Box<dyn ProtocolUpdateBatchGroupGenerator<'_> + '_>> {
41 vec![FixedBatchGroupGenerator::named("principal")
42 .add_batch("primary", |store| {
43 generate_main_batch(store, &self.settings)
44 })
45 .build()]
46 }
47}
48
49fn generate_main_batch(
50 store: &dyn SubstateDatabase,
51 EagleRaySettings {
52 system_version_update,
53 }: &EagleRaySettings,
54) -> ProtocolUpdateBatch {
55 let mut batch = ProtocolUpdateBatch::empty();
56
57 if let UpdateSetting::Enabled(NoSettings) = system_version_update {
58 batch.mut_add_flash(
59 "eagle-ray-system-version-update",
60 generate_system_boot_v5_updates(store),
61 );
62 }
63
64 batch
65}
66
67fn generate_system_boot_v5_updates(store: &dyn SubstateDatabase) -> StateUpdates {
68 let existing_system_boot: SystemBoot = store.get_existing_substate(
69 TRANSACTION_TRACKER,
70 BOOT_LOADER_PARTITION,
71 BootLoaderField::SystemBoot,
72 );
73
74 StateUpdates::empty().set_substate(
75 TRANSACTION_TRACKER,
76 BOOT_LOADER_PARTITION,
77 BootLoaderField::SystemBoot,
78 SystemBoot::eagle_ray_for_previous_parameters(existing_system_boot.into_parameters()),
79 )
80}