diff --git a/core-rust-bridge/src/main/java/com/radixdlt/protocol/ProtocolConfig.java b/core-rust-bridge/src/main/java/com/radixdlt/protocol/ProtocolConfig.java index 90893680d8..5c834ddd31 100644 --- a/core-rust-bridge/src/main/java/com/radixdlt/protocol/ProtocolConfig.java +++ b/core-rust-bridge/src/main/java/com/radixdlt/protocol/ProtocolConfig.java @@ -85,14 +85,16 @@ public record ProtocolConfig( public static final String GENESIS_PROTOCOL_VERSION_NAME = "babylon-genesis"; public static final String ANEMONE_PROTOCOL_VERSION_NAME = "anemone"; public static final String BOTTLENOSE_PROTOCOL_VERSION_NAME = "bottlenose"; - public static final String CUTTLEFISH_PROTOCOL_VERSION_NAME = "cuttlefish"; + public static final String CUTTLEFISH_PART1_PROTOCOL_VERSION_NAME = "cuttlefish"; + public static final String CUTTLEFISH_PART2_PROTOCOL_VERSION_NAME = "cuttlefish-part2"; public static ImmutableList VERSION_NAMES = ImmutableList.of( GENESIS_PROTOCOL_VERSION_NAME, ANEMONE_PROTOCOL_VERSION_NAME, BOTTLENOSE_PROTOCOL_VERSION_NAME, - CUTTLEFISH_PROTOCOL_VERSION_NAME); + CUTTLEFISH_PART1_PROTOCOL_VERSION_NAME, + CUTTLEFISH_PART2_PROTOCOL_VERSION_NAME); public static final String LATEST_PROTOCOL_VERSION_NAME = VERSION_NAMES.get(VERSION_NAMES.size() - 1); diff --git a/core-rust/Cargo.lock b/core-rust/Cargo.lock index 4bdf25304b..10a73a67c7 100644 --- a/core-rust/Cargo.lock +++ b/core-rust/Cargo.lock @@ -1753,7 +1753,7 @@ dependencies = [ [[package]] name = "radix-blueprint-schema-init" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "bitflags 1.3.2", "radix-common", @@ -1764,7 +1764,7 @@ dependencies = [ [[package]] name = "radix-common" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "bech32", "blake2", @@ -1790,7 +1790,7 @@ dependencies = [ [[package]] name = "radix-common-derive" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "paste", "proc-macro2", @@ -1802,7 +1802,7 @@ dependencies = [ [[package]] name = "radix-engine" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "bitflags 1.3.2", "colored", @@ -1833,7 +1833,7 @@ dependencies = [ [[package]] name = "radix-engine-interface" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "bitflags 1.3.2", "const-sha1", @@ -1854,7 +1854,7 @@ dependencies = [ [[package]] name = "radix-engine-profiling" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "fixedstr", ] @@ -1862,7 +1862,7 @@ dependencies = [ [[package]] name = "radix-engine-profiling-derive" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "proc-macro2", "quote", @@ -1873,7 +1873,7 @@ dependencies = [ [[package]] name = "radix-engine-toolkit-common" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "radix-common", "radix-engine", @@ -1887,7 +1887,7 @@ dependencies = [ [[package]] name = "radix-native-sdk" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "radix-common", "radix-engine-interface", @@ -1898,7 +1898,7 @@ dependencies = [ [[package]] name = "radix-rust" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "indexmap 2.2.6", "serde", @@ -1907,7 +1907,7 @@ dependencies = [ [[package]] name = "radix-sbor-derive" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "proc-macro2", "quote", @@ -1918,7 +1918,7 @@ dependencies = [ [[package]] name = "radix-substate-store-impls" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "hex", "itertools", @@ -1932,7 +1932,7 @@ dependencies = [ [[package]] name = "radix-substate-store-interface" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "hex", "itertools", @@ -1944,7 +1944,7 @@ dependencies = [ [[package]] name = "radix-substate-store-queries" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "hex", "itertools", @@ -1961,7 +1961,7 @@ dependencies = [ [[package]] name = "radix-transaction-scenarios" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "hex", "itertools", @@ -1981,7 +1981,7 @@ dependencies = [ [[package]] name = "radix-transactions" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "annotate-snippets", "bech32", @@ -2154,7 +2154,7 @@ dependencies = [ [[package]] name = "sbor" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "const-sha1", "hex", @@ -2168,7 +2168,7 @@ dependencies = [ [[package]] name = "sbor-derive" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "proc-macro2", "sbor-derive-common", @@ -2178,7 +2178,7 @@ dependencies = [ [[package]] name = "sbor-derive-common" version = "1.3.0-dev" -source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-640cc0f6#640cc0f6cf0dd306c25a74b4244b52e24a121f25" +source = "git+https://github.com/radixdlt/radixdlt-scrypto?tag=cuttlefish-c3aa4337#c3aa4337b7631b5fb90acef44fa8ffd62bdea821" dependencies = [ "const-sha1", "indexmap 2.2.6", diff --git a/core-rust/Cargo.toml b/core-rust/Cargo.toml index 6e87403888..d4955f2944 100644 --- a/core-rust/Cargo.toml +++ b/core-rust/Cargo.toml @@ -26,18 +26,18 @@ resolver = "2" # Then use tag="release_name-BLAH" in the below dependencies. # ================================================================= -sbor = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6", features = ["serde"] } -radix-transactions = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6" } -radix-transaction-scenarios = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6" } -radix-common = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6", features = ["serde"] } -radix-engine-interface = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6" } -radix-engine = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6" } -radix-substate-store-impls = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6" } -radix-substate-store-interface = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6" } -radix-substate-store-queries = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6" } -radix-rust = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6", features = ["serde"] } -radix-blueprint-schema-init = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6", features = ["serde"] } -radix-engine-toolkit-common = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-640cc0f6" } +sbor = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337", features = ["serde"] } +radix-transactions = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337" } +radix-transaction-scenarios = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337" } +radix-common = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337", features = ["serde"] } +radix-engine-interface = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337" } +radix-engine = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337" } +radix-substate-store-impls = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337" } +radix-substate-store-interface = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337" } +radix-substate-store-queries = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337" } +radix-rust = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337", features = ["serde"] } +radix-blueprint-schema-init = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337", features = ["serde"] } +radix-engine-toolkit-common = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "cuttlefish-c3aa4337" } itertools = { version = "=0.10.5" } jni = { version = "=0.19.0" } diff --git a/core-rust/core-api-server/core-api-schema.yaml b/core-rust/core-api-server/core-api-schema.yaml index 22d6b4c58f..6bfd4b2068 100644 --- a/core-rust/core-api-server/core-api-schema.yaml +++ b/core-rust/core-api-server/core-api-schema.yaml @@ -4384,6 +4384,7 @@ components: enum: - V1 - V2 + - V3 SystemParameters: type: object required: diff --git a/core-rust/core-api-server/src/core_api/conversions/substates/boot_loader_module.rs b/core-rust/core-api-server/src/core_api/conversions/substates/boot_loader_module.rs index 7b73a5941a..db7b067721 100644 --- a/core-rust/core-api-server/src/core_api/conversions/substates/boot_loader_module.rs +++ b/core-rust/core-api-server/src/core_api/conversions/substates/boot_loader_module.rs @@ -31,6 +31,7 @@ fn to_api_system_version(system_version: &SystemVersion) -> models::SystemVersio match system_version { SystemVersion::V1 => models::SystemVersion::V1, SystemVersion::V2 => models::SystemVersion::V2, + SystemVersion::V3 => models::SystemVersion::V3, } } diff --git a/core-rust/core-api-server/src/core_api/generated/models/system_version.rs b/core-rust/core-api-server/src/core_api/generated/models/system_version.rs index a497e754eb..c717c3eb5f 100644 --- a/core-rust/core-api-server/src/core_api/generated/models/system_version.rs +++ b/core-rust/core-api-server/src/core_api/generated/models/system_version.rs @@ -17,6 +17,8 @@ pub enum SystemVersion { V1, #[serde(rename = "V2")] V2, + #[serde(rename = "V3")] + V3, } @@ -25,6 +27,7 @@ impl ToString for SystemVersion { match self { Self::V1 => String::from("V1"), Self::V2 => String::from("V2"), + Self::V3 => String::from("V3"), } } } diff --git a/core-rust/state-manager/src/protocol/protocol_config.rs b/core-rust/state-manager/src/protocol/protocol_config.rs index 9295a61a51..282300995a 100644 --- a/core-rust/state-manager/src/protocol/protocol_config.rs +++ b/core-rust/state-manager/src/protocol/protocol_config.rs @@ -10,13 +10,15 @@ const MAX_PROTOCOL_VERSION_NAME_LEN: usize = 16; const GENESIS_PROTOCOL_VERSION: &str = "babylon-genesis"; const ANEMONE_PROTOCOL_VERSION: &str = "anemone"; const BOTTLENOSE_PROTOCOL_VERSION: &str = "bottlenose"; -const CUTTLEFISH_PROTOCOL_VERSION: &str = "cuttlefish"; +const CUTTLEFISH_PART1_PROTOCOL_VERSION: &str = "cuttlefish"; +const CUTTLEFISH_PART2_PROTOCOL_VERSION: &str = "cuttlefish-part2"; pub enum ResolvedProtocolVersion { Babylon, Anemone, Bottlenose, - Cuttlefish, + CuttlefishPart1, + CuttlefishPart2, Custom(ProtocolVersionName), Test(ProtocolVersionName), } @@ -27,7 +29,8 @@ impl ResolvedProtocolVersion { GENESIS_PROTOCOL_VERSION => Some(ResolvedProtocolVersion::Babylon), ANEMONE_PROTOCOL_VERSION => Some(ResolvedProtocolVersion::Anemone), BOTTLENOSE_PROTOCOL_VERSION => Some(ResolvedProtocolVersion::Bottlenose), - CUTTLEFISH_PROTOCOL_VERSION => Some(ResolvedProtocolVersion::Cuttlefish), + CUTTLEFISH_PART1_PROTOCOL_VERSION => Some(ResolvedProtocolVersion::CuttlefishPart1), + CUTTLEFISH_PART2_PROTOCOL_VERSION => Some(ResolvedProtocolVersion::CuttlefishPart2), // Updates starting "custom-" are intended for use with tests, where the thresholds and config are injected on all nodes name_string if CustomProtocolUpdateDefinition::matches(name_string) => Some( ResolvedProtocolVersion::Custom(protocol_version_name.clone()), @@ -45,7 +48,8 @@ impl ResolvedProtocolVersion { ResolvedProtocolVersion::Babylon => Some(ProtocolVersion::Babylon), ResolvedProtocolVersion::Anemone => Some(ProtocolVersion::Anemone), ResolvedProtocolVersion::Bottlenose => Some(ProtocolVersion::Bottlenose), - ResolvedProtocolVersion::Cuttlefish => Some(ProtocolVersion::Cuttlefish), + ResolvedProtocolVersion::CuttlefishPart1 => Some(ProtocolVersion::CuttlefishPart1), + ResolvedProtocolVersion::CuttlefishPart2 => Some(ProtocolVersion::CuttlefishPart2), ResolvedProtocolVersion::Custom { .. } => None, ResolvedProtocolVersion::Test { .. } => None, } @@ -56,7 +60,12 @@ impl ResolvedProtocolVersion { ResolvedProtocolVersion::Babylon => Box::new(BabylonProtocolUpdateDefinition), ResolvedProtocolVersion::Anemone => Box::new(AnemoneProtocolUpdateDefinition), ResolvedProtocolVersion::Bottlenose => Box::new(BottlenoseProtocolUpdateDefinition), - ResolvedProtocolVersion::Cuttlefish => Box::new(CuttlefishProtocolUpdateDefinition), + ResolvedProtocolVersion::CuttlefishPart1 => { + Box::new(CuttlefishPart1ProtocolUpdateDefinition) + } + ResolvedProtocolVersion::CuttlefishPart2 => { + Box::new(CuttlefishPart2ProtocolUpdateDefinition) + } ResolvedProtocolVersion::Custom(..) => Box::new(CustomProtocolUpdateDefinition), ResolvedProtocolVersion::Test(name) => { Box::new(TestProtocolUpdateDefinition::new(name.clone())) @@ -179,8 +188,12 @@ impl ProtocolVersionName { Self::of(BOTTLENOSE_PROTOCOL_VERSION).unwrap() } - pub fn cuttlefish() -> Self { - Self::of(CUTTLEFISH_PROTOCOL_VERSION).unwrap() + pub fn cuttlefish_part1() -> Self { + Self::of(CUTTLEFISH_PART1_PROTOCOL_VERSION).unwrap() + } + + pub fn cuttlefish_part2() -> Self { + Self::of(CUTTLEFISH_PART2_PROTOCOL_VERSION).unwrap() } pub fn for_engine(version: ProtocolVersion) -> Self { @@ -189,7 +202,8 @@ impl ProtocolVersionName { ProtocolVersion::Babylon => Self::babylon(), ProtocolVersion::Anemone => Self::anemone(), ProtocolVersion::Bottlenose => Self::bottlenose(), - ProtocolVersion::Cuttlefish => Self::cuttlefish(), + ProtocolVersion::CuttlefishPart1 => Self::cuttlefish_part1(), + ProtocolVersion::CuttlefishPart2 => Self::cuttlefish_part2(), } } diff --git a/core-rust/state-manager/src/protocol/protocol_configs/config_printer.rs b/core-rust/state-manager/src/protocol/protocol_configs/config_printer.rs index 7397386d8d..4a674eba69 100644 --- a/core-rust/state-manager/src/protocol/protocol_configs/config_printer.rs +++ b/core-rust/state-manager/src/protocol/protocol_configs/config_printer.rs @@ -19,7 +19,7 @@ use super::*; #[test] fn print_fixed_config_code() { // This is used for stokenet and dumunet - let version = ProtocolVersionName::cuttlefish(); + let version = ProtocolVersionName::cuttlefish_part2(); let start_epoch = Epoch::of(1); let end_epoch = Epoch::of(10000000); let thresholds = vec![SignalledReadinessThreshold { @@ -43,7 +43,7 @@ fn print_calculated_protocol_config_code() { // See https://learn.radixdlt.com/article/radix-foundation-protocol-update-candidate-policies // For guidance on how to set these paramaters - let version = ProtocolVersionName::cuttlefish(); + let version = ProtocolVersionName::cuttlefish_part1(); let target_start = DateTime::::from_str("2024-12-10T16:00:00.000Z").unwrap(); let enactment_window = Duration::days(10); // Normally set to 28 days, but shorter due to christmas let proposed_thresholds = [(dec!(0.75), Duration::days(14))]; diff --git a/core-rust/state-manager/src/protocol/protocol_configs/dumunet_protocol_config.rs b/core-rust/state-manager/src/protocol/protocol_configs/dumunet_protocol_config.rs index 334639a564..d38a16689e 100644 --- a/core-rust/state-manager/src/protocol/protocol_configs/dumunet_protocol_config.rs +++ b/core-rust/state-manager/src/protocol/protocol_configs/dumunet_protocol_config.rs @@ -30,7 +30,7 @@ pub fn dumunet_protocol_config() -> ProtocolConfig { required_consecutive_completed_epochs_of_support: 10, }], }, - ProtocolVersionName::cuttlefish() => EnactAtStartOfEpochIfValidatorsReady { + ProtocolVersionName::cuttlefish_part1() => EnactAtStartOfEpochIfValidatorsReady { // ================================================================= // PROTOCOL_VERSION: "cuttlefish" // READINESS_SIGNAL: "034d3327f58995c6000000cuttlefish" @@ -44,5 +44,8 @@ pub fn dumunet_protocol_config() -> ProtocolConfig { }, ], }, + ProtocolVersionName::cuttlefish_part2() => EnactImmediatelyAfterEndOfProtocolUpdate { + trigger_after: ProtocolVersionName::cuttlefish_part1(), + }, }) } diff --git a/core-rust/state-manager/src/protocol/protocol_configs/mainnet_protocol_config.rs b/core-rust/state-manager/src/protocol/protocol_configs/mainnet_protocol_config.rs index eec616856b..8d65cc902e 100644 --- a/core-rust/state-manager/src/protocol/protocol_configs/mainnet_protocol_config.rs +++ b/core-rust/state-manager/src/protocol/protocol_configs/mainnet_protocol_config.rs @@ -44,7 +44,7 @@ pub fn mainnet_protocol_config() -> ProtocolConfig { }, ], }, - ProtocolVersionName::cuttlefish() => EnactAtStartOfEpochIfValidatorsReady { + ProtocolVersionName::cuttlefish_part1() => EnactAtStartOfEpochIfValidatorsReady { // ================================================================= // PROTOCOL_VERSION: "cuttlefish" // READINESS_SIGNAL: "96e00440adafe5e2000000cuttlefish" @@ -63,5 +63,8 @@ pub fn mainnet_protocol_config() -> ProtocolConfig { }, ], }, + ProtocolVersionName::cuttlefish_part2() => EnactImmediatelyAfterEndOfProtocolUpdate { + trigger_after: ProtocolVersionName::cuttlefish_part1(), + }, }) } diff --git a/core-rust/state-manager/src/protocol/protocol_configs/stokenet_protocol_config.rs b/core-rust/state-manager/src/protocol/protocol_configs/stokenet_protocol_config.rs index e5fe46531e..d399d8c3c3 100644 --- a/core-rust/state-manager/src/protocol/protocol_configs/stokenet_protocol_config.rs +++ b/core-rust/state-manager/src/protocol/protocol_configs/stokenet_protocol_config.rs @@ -30,7 +30,7 @@ pub fn stokenet_protocol_config() -> ProtocolConfig { required_consecutive_completed_epochs_of_support: 10, }], }, - ProtocolVersionName::cuttlefish() => EnactAtStartOfEpochIfValidatorsReady { + ProtocolVersionName::cuttlefish_part1() => EnactAtStartOfEpochIfValidatorsReady { // ================================================================= // PROTOCOL_VERSION: "cuttlefish" // READINESS_SIGNAL: "034d3327f58995c6000000cuttlefish" @@ -44,5 +44,19 @@ pub fn stokenet_protocol_config() -> ProtocolConfig { }, ], }, + ProtocolVersionName::cuttlefish_part2() => EnactAtStartOfEpochIfValidatorsReady { + // ================================================================= + // PROTOCOL_VERSION: "cuttlefish-part2" + // READINESS_SIGNAL: "c0d928cf271e039ecuttlefish-part2" + // ================================================================= + lower_bound_inclusive: Epoch::of(1), + upper_bound_exclusive: Epoch::of(10000000), + readiness_thresholds: vec![ + SignalledReadinessThreshold { + required_ratio_of_stake_supported: dec!(0.8), + required_consecutive_completed_epochs_of_support: 10, + }, + ], + }, }) } diff --git a/core-rust/state-manager/src/protocol/protocol_configs/testnet_protocol_config.rs b/core-rust/state-manager/src/protocol/protocol_configs/testnet_protocol_config.rs index 29dac64d91..a5078e7d48 100644 --- a/core-rust/state-manager/src/protocol/protocol_configs/testnet_protocol_config.rs +++ b/core-rust/state-manager/src/protocol/protocol_configs/testnet_protocol_config.rs @@ -13,8 +13,11 @@ pub fn testnet_protocol_config() -> ProtocolConfig { ProtocolVersionName::bottlenose() => EnactImmediatelyAfterEndOfProtocolUpdate { trigger_after: ProtocolVersionName::anemone(), }, - ProtocolVersionName::cuttlefish() => EnactImmediatelyAfterEndOfProtocolUpdate { + ProtocolVersionName::cuttlefish_part1() => EnactImmediatelyAfterEndOfProtocolUpdate { trigger_after: ProtocolVersionName::bottlenose(), }, + ProtocolVersionName::cuttlefish_part2() => EnactImmediatelyAfterEndOfProtocolUpdate { + trigger_after: ProtocolVersionName::cuttlefish_part1(), + }, }) } diff --git a/core-rust/state-manager/src/protocol/protocol_updates/definitions/cuttlefish_definition.rs b/core-rust/state-manager/src/protocol/protocol_updates/definitions/cuttlefish_part1_definition.rs similarity index 69% rename from core-rust/state-manager/src/protocol/protocol_updates/definitions/cuttlefish_definition.rs rename to core-rust/state-manager/src/protocol/protocol_updates/definitions/cuttlefish_part1_definition.rs index 25e1ccb148..e726c8e033 100644 --- a/core-rust/state-manager/src/protocol/protocol_updates/definitions/cuttlefish_definition.rs +++ b/core-rust/state-manager/src/protocol/protocol_updates/definitions/cuttlefish_part1_definition.rs @@ -1,9 +1,9 @@ use crate::prelude::*; -pub struct CuttlefishProtocolUpdateDefinition; +pub struct CuttlefishPart1ProtocolUpdateDefinition; -impl ProtocolUpdateDefinition for CuttlefishProtocolUpdateDefinition { - type Overrides = CuttlefishSettings; +impl ProtocolUpdateDefinition for CuttlefishPart1ProtocolUpdateDefinition { + type Overrides = CuttlefishPart1Settings; fn create_batch_generator( &self, diff --git a/core-rust/state-manager/src/protocol/protocol_updates/definitions/cuttlefish_part2_definition.rs b/core-rust/state-manager/src/protocol/protocol_updates/definitions/cuttlefish_part2_definition.rs new file mode 100644 index 0000000000..ba3ac9f02a --- /dev/null +++ b/core-rust/state-manager/src/protocol/protocol_updates/definitions/cuttlefish_part2_definition.rs @@ -0,0 +1,20 @@ +use crate::prelude::*; + +pub struct CuttlefishPart2ProtocolUpdateDefinition; + +impl ProtocolUpdateDefinition for CuttlefishPart2ProtocolUpdateDefinition { + type Overrides = CuttlefishPart2Settings; + + fn create_batch_generator( + &self, + context: ProtocolUpdateContext, + overrides_hash: Option, + overrides: Option, + ) -> Box { + Box::new(create_default_generator_with_scenarios( + context, + overrides_hash, + overrides, + )) + } +} diff --git a/core-rust/state-manager/src/protocol/protocol_updates/definitions/mod.rs b/core-rust/state-manager/src/protocol/protocol_updates/definitions/mod.rs index 7473061385..c518a4f7e3 100644 --- a/core-rust/state-manager/src/protocol/protocol_updates/definitions/mod.rs +++ b/core-rust/state-manager/src/protocol/protocol_updates/definitions/mod.rs @@ -2,12 +2,14 @@ mod anemone_definition; mod babylon_definition; mod bottlenose_definition; mod custom_definition; -mod cuttlefish_definition; +mod cuttlefish_part1_definition; +mod cuttlefish_part2_definition; mod test_definition; pub use anemone_definition::*; pub use babylon_definition::*; pub use bottlenose_definition::*; pub use custom_definition::*; -pub use cuttlefish_definition::*; +pub use cuttlefish_part1_definition::*; +pub use cuttlefish_part2_definition::*; pub use test_definition::*; diff --git a/core-rust/state-manager/src/protocol/protocol_updates/protocol_content_overrides.rs b/core-rust/state-manager/src/protocol/protocol_updates/protocol_content_overrides.rs index 32ec128401..72d38d02ef 100644 --- a/core-rust/state-manager/src/protocol/protocol_updates/protocol_content_overrides.rs +++ b/core-rust/state-manager/src/protocol/protocol_updates/protocol_content_overrides.rs @@ -10,7 +10,8 @@ pub struct ProtocolUpdateContentOverrides { babylon: Option>, anemone: Option>, bottlenose: Option>, - cuttlefish: Option>, + cuttlefish_part1: Option>, + cuttlefish_part2: Option>, custom: HashMap>, } @@ -37,11 +38,19 @@ impl ProtocolUpdateContentOverrides { self } - pub fn with_cuttlefish( + pub fn with_cuttlefish_part1( mut self, - config: Overrides, + config: Overrides, ) -> Self { - self.cuttlefish = Some(config); + self.cuttlefish_part1 = Some(config); + self + } + + pub fn with_cuttlefish_part2( + mut self, + config: Overrides, + ) -> Self { + self.cuttlefish_part2 = Some(config); self } @@ -83,9 +92,15 @@ impl From for RawProtocolUpdateContentOverrides scrypto_encode(&config).unwrap(), ); } - if let Some(config) = value.cuttlefish { + if let Some(config) = value.cuttlefish_part1 { + map.insert( + ProtocolVersionName::cuttlefish_part1(), + scrypto_encode(&config).unwrap(), + ); + } + if let Some(config) = value.cuttlefish_part2 { map.insert( - ProtocolVersionName::cuttlefish(), + ProtocolVersionName::cuttlefish_part2(), scrypto_encode(&config).unwrap(), ); } diff --git a/core/src/test-core/java/com/radixdlt/api/core/generated/models/SystemVersion.java b/core/src/test-core/java/com/radixdlt/api/core/generated/models/SystemVersion.java index b80047f930..2467188a9f 100644 --- a/core/src/test-core/java/com/radixdlt/api/core/generated/models/SystemVersion.java +++ b/core/src/test-core/java/com/radixdlt/api/core/generated/models/SystemVersion.java @@ -31,7 +31,9 @@ public enum SystemVersion { V1("V1"), - V2("V2"); + V2("V2"), + + V3("V3"); private String value; diff --git a/core/src/test/java/com/radixdlt/rev2/protocol/CuttlefishProtocolUpdateTest.java b/core/src/test/java/com/radixdlt/rev2/protocol/CuttlefishProtocolUpdateTest.java index 276153f9dc..68d2532ca3 100644 --- a/core/src/test/java/com/radixdlt/rev2/protocol/CuttlefishProtocolUpdateTest.java +++ b/core/src/test/java/com/radixdlt/rev2/protocol/CuttlefishProtocolUpdateTest.java @@ -88,10 +88,11 @@ public final class CuttlefishProtocolUpdateTest { private static final long ENACTMENT_EPOCH = 8; - private static final ProtocolConfig IMMEDIATELY_CUTTLEFISH = - ProtocolConfig.launchAt(ProtocolConfig.CUTTLEFISH_PROTOCOL_VERSION_NAME); - private static final ProtocolConfig CUTTLEFISH_AT_EPOCH = - ProtocolConfig.enactAtEpoch(ProtocolConfig.CUTTLEFISH_PROTOCOL_VERSION_NAME, ENACTMENT_EPOCH); + private static final ProtocolConfig IMMEDIATELY_CUTTLEFISH_PART2 = + ProtocolConfig.launchAt(ProtocolConfig.CUTTLEFISH_PART2_PROTOCOL_VERSION_NAME); + private static final ProtocolConfig CUTTLEFISH_PART1_AT_EPOCH = + ProtocolConfig.enactAtEpoch( + ProtocolConfig.CUTTLEFISH_PART1_PROTOCOL_VERSION_NAME, ENACTMENT_EPOCH); @Rule public TemporaryFolder folder = new TemporaryFolder(); @@ -121,7 +122,7 @@ private DeterministicTest createTest(ProtocolConfig protocolConfig, Module... ex @Test public void transaction_v2_behaviour_across_cuttlefish() throws ApiException { final var coreApiHelper = new CoreApiHelper(Network.INTEGRATIONTESTNET); - try (var test = createTest(CUTTLEFISH_AT_EPOCH, coreApiHelper.module())) { + try (var test = createTest(CUTTLEFISH_PART1_AT_EPOCH, coreApiHelper.module())) { final var stateComputer = test.getInstance(0, RustStateComputer.class); test.runUntilState(allAtOrOverEpoch(ENACTMENT_EPOCH - 1)); @@ -148,13 +149,13 @@ public void transaction_v2_behaviour_across_cuttlefish() throws ApiException { // Arrange: Run the protocol update: test.runUntilState( - allAtExactlyProtocolVersion(ProtocolConfig.CUTTLEFISH_PROTOCOL_VERSION_NAME)); + allAtExactlyProtocolVersion(ProtocolConfig.CUTTLEFISH_PART1_PROTOCOL_VERSION_NAME)); assertEquals( - ProtocolConfig.CUTTLEFISH_PROTOCOL_VERSION_NAME, + ProtocolConfig.CUTTLEFISH_PART1_PROTOCOL_VERSION_NAME, stateComputer.protocolState().currentProtocolVersion()); assertEquals( - ProtocolConfig.CUTTLEFISH_PROTOCOL_VERSION_NAME, + ProtocolConfig.CUTTLEFISH_PART1_PROTOCOL_VERSION_NAME, coreApiHelper.getNetworkStatus().getCurrentProtocolVersion()); // Act: Can now submit a new TransactionV2 @@ -189,7 +190,7 @@ public void transaction_v2_behaviour_across_cuttlefish() throws ApiException { @Test public void protocol_update_process_updates_status_summary() throws ApiException { final var coreApiHelper = new CoreApiHelper(Network.INTEGRATIONTESTNET); - try (var test = createTest(IMMEDIATELY_CUTTLEFISH, coreApiHelper.module())) { + try (var test = createTest(IMMEDIATELY_CUTTLEFISH_PART2, coreApiHelper.module())) { test.suppressUnusedWarning(); var latestStateVersion = @@ -208,7 +209,7 @@ public void protocol_update_process_updates_status_summary() throws ApiException .getNewValue() .getSubstateData(); assertEquals( - ProtocolConfig.CUTTLEFISH_PROTOCOL_VERSION_NAME, latestStatus.getProtocolVersion()); + ProtocolConfig.CUTTLEFISH_PART2_PROTOCOL_VERSION_NAME, latestStatus.getProtocolVersion()); assertEquals(ProtocolUpdateStatusType.COMPLETE, latestStatus.getUpdateStatus().getType()); } } diff --git a/sdk/typescript/lib/generated/models/SystemVersion.ts b/sdk/typescript/lib/generated/models/SystemVersion.ts index b4505f0219..66c995630d 100644 --- a/sdk/typescript/lib/generated/models/SystemVersion.ts +++ b/sdk/typescript/lib/generated/models/SystemVersion.ts @@ -19,7 +19,8 @@ */ export const SystemVersion = { V1: 'V1', - V2: 'V2' + V2: 'V2', + V3: 'V3' } as const; export type SystemVersion = typeof SystemVersion[keyof typeof SystemVersion];