diff --git a/engine/package/perseverance/preinst b/engine/package/perseverance/preinst index 310355604a..4266cfdd4c 100755 --- a/engine/package/perseverance/preinst +++ b/engine/package/perseverance/preinst @@ -6,13 +6,12 @@ if [ "$1" != "upgrade" ]; then exit 0 fi -# TODO: Uncomment after we re-re-release 0.8 -#ENGINE_VERSION=$(chainflip-engine -V) -# -#if echo "$ENGINE_VERSION" | grep 0.8; then -# echo "chainflip-engine: Detected version 0.8, skipping migration" -# exit 0 -#fi +ENGINE_VERSION=$(chainflip-engine -V) + +if echo "$ENGINE_VERSION" | grep 0.9; then + echo "chainflip-engine: Detected version 0.9, skipping migration" + exit 0 +fi CF_ROOT=/etc/chainflip @@ -43,24 +42,6 @@ if [ -f "/var/log/chainflip-engine.log" ]; then rm -rf "/var/log/chainflip-engine*" fi -# Add the BTC settings to the config file if they don't exist -if ! grep -q '\[btc\]' /etc/chainflip/config/Settings.toml; then - echo "chainflip-engine: No BTC config found ... Adding BTC RPC endpoint to config file" - cat <>$CF_ROOT/config/Settings.toml - -[btc] -http_node_endpoint = "http://a108a82b574a640359e360cf66afd45d-424380952.eu-central-1.elb.amazonaws.com" -rpc_user = "flip" -rpc_password = "flip" -EOF -fi - -# Check if pdot endpoint is pdot.chainflip.io and change to pdot.chainflip.xyz -if grep -q 'pdot.chainflip.io' /etc/chainflip/config/Settings.toml; then - echo "chainflip-engine: Found pdot.chainflip.io endpoint ... Changing to pdot.chainflip.xyz" - sed -i 's/pdot.chainflip.io/pdot.chainflip.xyz/g' /etc/chainflip/config/Settings.toml -fi - systemctl daemon-reload #DEBHELPER# diff --git a/state-chain/node/package/perseverance/preinst b/state-chain/node/package/perseverance/preinst index 9de0e9f32e..88cf14084e 100755 --- a/state-chain/node/package/perseverance/preinst +++ b/state-chain/node/package/perseverance/preinst @@ -17,13 +17,12 @@ else echo "chainflip-node is already stopped." fi -# TODO: Uncomment after we re-re-release 0.8 -#NODE_VERSION=$(chainflip-node -V) -# -#if echo "$NODE_VERSION" | grep 0.8; then -# echo "chainflip-node: Detected version 0.8, skipping migration" -# exit 0 -#fi +NODE_VERSION=$(chainflip-node -V) + +if echo "$NODE_VERSION" | grep 0.9; then + echo "chainflip-node: Detected version 0.9, skipping migration" + exit 0 +fi # Backup and delete systemd overrides if they exist if [ -f /etc/systemd/system/chainflip-node.service.d/override.conf ]; then diff --git a/state-chain/node/src/chain_spec.rs b/state-chain/node/src/chain_spec.rs index aa9b78eb57..3bd2d6a682 100644 --- a/state-chain/node/src/chain_spec.rs +++ b/state-chain/node/src/chain_spec.rs @@ -322,11 +322,11 @@ macro_rules! network_spec { "{}-{}", PROTOCOL_ID, hex::encode( - SystemTime::now() + &SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() - .as_millis() - .to_be_bytes(), + .as_secs() + .to_be_bytes()[4..], ) ); Ok(ChainSpec::from_genesis( diff --git a/state-chain/pallets/cf-validator/src/lib.rs b/state-chain/pallets/cf-validator/src/lib.rs index b5c2c17017..51052dc429 100644 --- a/state-chain/pallets/cf-validator/src/lib.rs +++ b/state-chain/pallets/cf-validator/src/lib.rs @@ -366,7 +366,7 @@ pub mod pallet { }, AsyncResult::Ready(VaultStatus::Failed(offenders)) => { rotation_state.ban(offenders); - Self::try_start_keygen(rotation_state); + Self::try_restart_keygen(rotation_state); }, AsyncResult::Pending => { log::debug!(target: "cf-validator", "awaiting keygen completion"); @@ -403,12 +403,12 @@ pub mod pallet { log::warn!( "{num_failed_candidates} authority candidate(s) failed to participate in key handover. Retrying from keygen.", ); - Self::try_start_keygen(rotation_state); + Self::try_restart_keygen(rotation_state); } else { log::warn!( "Key handover attempt failed. Retrying with a new participant set.", ); - Self::try_start_key_handover(rotation_state, block_number) + Self::try_restart_key_handover(rotation_state, block_number) }; }, AsyncResult::Pending => { @@ -967,7 +967,7 @@ impl Pallet { target: "cf-validator", "Aborting rotation at phase: {:?}.", CurrentRotationPhase::::get() ); - T::VaultRotator::abort_vault_rotation(); + T::VaultRotator::reset_vault_rotation(); Self::set_rotation_phase(RotationPhase::Idle); Self::deposit_event(Event::::RotationAborted); } @@ -1043,6 +1043,11 @@ impl Pallet { } } + fn try_restart_keygen(rotation_state: RuntimeRotationState) { + T::VaultRotator::reset_vault_rotation(); + Self::try_start_keygen(rotation_state); + } + fn try_start_keygen(rotation_state: RuntimeRotationState) { let candidates = rotation_state.authority_candidates(); let SetSizeParameters { min_size, .. } = AuctionParameters::::get(); @@ -1061,6 +1066,14 @@ impl Pallet { } } + fn try_restart_key_handover( + rotation_state: RuntimeRotationState, + block_number: BlockNumberFor, + ) { + T::VaultRotator::reset_vault_rotation(); + Self::try_start_key_handover(rotation_state, block_number); + } + fn try_start_key_handover( rotation_state: RuntimeRotationState, block_number: BlockNumberFor, diff --git a/state-chain/pallets/cf-vaults/src/tests.rs b/state-chain/pallets/cf-vaults/src/tests.rs index 921eb107f2..2f79e73e34 100644 --- a/state-chain/pallets/cf-vaults/src/tests.rs +++ b/state-chain/pallets/cf-vaults/src/tests.rs @@ -1124,8 +1124,8 @@ fn can_recover_from_abort_vault_rotation_after_failed_key_gen() { Some(VaultRotationStatus::Failed { .. }) )); - // Abort the vault rotation now - VaultsPallet::abort_vault_rotation(); + // Abort by resetting vault rotation state + VaultsPallet::reset_vault_rotation(); assert!(PendingVaultRotation::::get().is_none()); assert_eq!(KeygenResolutionPendingSince::::get(), 0); @@ -1163,7 +1163,7 @@ fn can_recover_from_abort_vault_rotation_after_key_verification() { )); // Abort the vault rotation now - VaultsPallet::abort_vault_rotation(); + VaultsPallet::reset_vault_rotation(); assert!(PendingVaultRotation::::get().is_none()); assert_eq!(KeygenResolutionPendingSince::::get(), 0); @@ -1221,8 +1221,8 @@ fn can_recover_from_abort_vault_rotation_after_key_handover_failed() { Some(VaultRotationStatus::KeyHandoverFailed { .. }) )); - // Abort the vault rotation now - VaultsPallet::abort_vault_rotation(); + // Abort by resetting vault rotation state + VaultsPallet::reset_vault_rotation(); assert!(PendingVaultRotation::::get().is_none()); assert_eq!(KeygenResolutionPendingSince::::get(), 0); diff --git a/state-chain/pallets/cf-vaults/src/vault_rotator.rs b/state-chain/pallets/cf-vaults/src/vault_rotator.rs index 83c9cd9338..c45984adcd 100644 --- a/state-chain/pallets/cf-vaults/src/vault_rotator.rs +++ b/state-chain/pallets/cf-vaults/src/vault_rotator.rs @@ -206,11 +206,10 @@ impl, I: 'static> VaultRotator for Pallet { } } - fn abort_vault_rotation() { + fn reset_vault_rotation() { PendingVaultRotation::::kill(); KeyHandoverResolutionPendingSince::::kill(); KeygenResolutionPendingSince::::kill(); - Self::deposit_event(Event::::VaultRotationAborted); } #[cfg(feature = "runtime-benchmarks")] diff --git a/state-chain/runtime/src/chainflip/all_vaults_rotator.rs b/state-chain/runtime/src/chainflip/all_vaults_rotator.rs index 55d7b07ed3..069e8fe70e 100644 --- a/state-chain/runtime/src/chainflip/all_vaults_rotator.rs +++ b/state-chain/runtime/src/chainflip/all_vaults_rotator.rs @@ -83,10 +83,10 @@ where C::activate(); } - fn abort_vault_rotation() { - A::abort_vault_rotation(); - B::abort_vault_rotation(); - C::abort_vault_rotation(); + fn reset_vault_rotation() { + A::reset_vault_rotation(); + B::reset_vault_rotation(); + C::reset_vault_rotation(); } #[cfg(feature = "runtime-benchmarks")] diff --git a/state-chain/traits/src/lib.rs b/state-chain/traits/src/lib.rs index 10ea4c8657..b7417abb1f 100644 --- a/state-chain/traits/src/lib.rs +++ b/state-chain/traits/src/lib.rs @@ -173,9 +173,9 @@ pub trait VaultRotator { /// on the contract for a smart contract chain. fn activate(); - /// Terminate the current key rotation because of Safe Mode. - /// No validators are slashed. - fn abort_vault_rotation(); + /// Reset the state associated with the current key rotation + /// in preparation for a new one. + fn reset_vault_rotation(); #[cfg(feature = "runtime-benchmarks")] fn set_status(_outcome: AsyncResult>); @@ -551,7 +551,8 @@ where A::is_qualified(validator_id) && B::is_qualified(validator_id) && C::is_qualified(validator_id) && - D::is_qualified(validator_id) + D::is_qualified(validator_id) && + E::is_qualified(validator_id) } fn filter_unqualified(validators: BTreeSet) -> BTreeSet { diff --git a/state-chain/traits/src/mocks/vault_rotator.rs b/state-chain/traits/src/mocks/vault_rotator.rs index 5c39cc34c8..fb18c54c11 100644 --- a/state-chain/traits/src/mocks/vault_rotator.rs +++ b/state-chain/traits/src/mocks/vault_rotator.rs @@ -73,7 +73,7 @@ macro_rules! mock_vault_rotator { Self::put_value(ROTATION_OUTCOME, AsyncResult::>::Pending); } - fn abort_vault_rotation() { + fn reset_vault_rotation() { Self::put_value(ROTATION_OUTCOME, AsyncResult::>::Void); }