From f97c2c1cd6211e4466e667981945e11b86c1127f Mon Sep 17 00:00:00 2001 From: Serban Iorga Date: Wed, 7 Sep 2022 12:38:11 +0300 Subject: [PATCH] beefy pallet - updates - impl OwnedBridgeModule - define LOG_TARGET - fix clippy warnings --- Cargo.lock | 1 + modules/beefy/Cargo.toml | 1 + modules/beefy/src/commitment.rs | 14 +-- modules/beefy/src/leaf.rs | 22 ++-- modules/beefy/src/lib.rs | 211 ++++++++++---------------------- modules/beefy/src/mock.rs | 18 +-- modules/beefy/src/mock_chain.rs | 10 +- primitives/beefy/src/lib.rs | 20 +-- 8 files changed, 107 insertions(+), 190 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 111dd75a5ee..2c9444db9dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5890,6 +5890,7 @@ dependencies = [ "beefy-primitives", "bp-beefy", "bp-runtime", + "bp-test-utils", "ckb-merkle-mountain-range", "env_logger 0.8.4", "frame-support", diff --git a/modules/beefy/Cargo.toml b/modules/beefy/Cargo.toml index 4334d9f8208..b22824acc32 100644 --- a/modules/beefy/Cargo.toml +++ b/modules/beefy/Cargo.toml @@ -36,6 +36,7 @@ pallet-beefy-mmr = { git = "https://github.com/paritytech/substrate", branch = " pallet-mmr = { git = "https://github.com/paritytech/substrate", branch = "master" } rand = "0.8" sp-io = { git = "https://github.com/paritytech/substrate", branch = "master" } +bp-test-utils = { path = "../../primitives/test-utils" } [features] default = ["std"] diff --git a/modules/beefy/src/commitment.rs b/modules/beefy/src/commitment.rs index abeba4208cc..d74d4c0b214 100644 --- a/modules/beefy/src/commitment.rs +++ b/modules/beefy/src/commitment.rs @@ -18,7 +18,7 @@ use crate::{ BridgedBeefyCommitmentHasher, BridgedBeefySignedCommitment, BridgedBeefyValidatorSet, - BridgedBlockNumber, Config, Error, + BridgedBlockNumber, Config, Error, LOG_TARGET, }; use bp_beefy::{BeefyMmrHash, BeefyRuntimeAppPublic}; @@ -71,7 +71,7 @@ pub fn verify_beefy_signed_commitment, I: 'static>( } } else { log::debug!( - target: "runtime::bridge-beefy", + target: LOG_TARGET, "Signed commitment contains incorrect signature of validator {} ({:?}): {:?}", validator_index, validator_public, @@ -254,10 +254,7 @@ mod tests { &BridgedBeefyValidatorSet::::new(validator_ids(0, 8), 0).unwrap(), &sign_commitment( Commitment { - payload: BeefyPayload::new( - MMR_ROOT_PAYLOAD_ID, - BeefyMmrHash::from([42u8; 32]).encode(), - ), + payload: BeefyPayload::new(MMR_ROOT_PAYLOAD_ID, [42u8; 32].encode()), block_number: 20, validator_set_id: 0, }, @@ -268,10 +265,7 @@ mod tests { assert_eq!( artifacts, - CommitmentVerificationArtifacts { - finalized_block_number: 20, - mmr_root: BeefyMmrHash::from([42u8; 32]), - } + CommitmentVerificationArtifacts { finalized_block_number: 20, mmr_root: [42u8; 32] } ); } } diff --git a/modules/beefy/src/leaf.rs b/modules/beefy/src/leaf.rs index ec935b6ab1a..e67f31d250e 100644 --- a/modules/beefy/src/leaf.rs +++ b/modules/beefy/src/leaf.rs @@ -19,7 +19,7 @@ use crate::{ BridgedBeefyMmrHasher, BridgedBeefyMmrLeaf, BridgedBeefyMmrLeafUnpacked, BridgedBeefyValidatorIdToMerkleLeaf, BridgedBeefyValidatorSet, BridgedBlockHash, - BridgedBlockNumber, Config, Error, + BridgedBlockNumber, Config, Error, LOG_TARGET, }; use bp_beefy::{ @@ -71,7 +71,7 @@ where ); // technically it is not an error, but we'd like to reduce tx size on real chains ensure!( - !mmr_leaf.next_validators().is_some() || is_updating_validator_set, + mmr_leaf.next_validators().is_none() || is_updating_validator_set, Error::::RedundantNextValidatorsProvided, ); ensure!( @@ -91,7 +91,7 @@ where >(mmr_root, MmrDataOrHash::Hash(mmr_leaf_hash), mmr_proof) .map_err(|e| { log::error!( - target: "runtime::bridge-beefy", + target: LOG_TARGET, "MMR proof of leaf {:?} (root: {:?} leaf: {} total: {} len: {}) verification has failed with error: {:?}", mmr_leaf_hash, mmr_root, @@ -114,7 +114,7 @@ where .map(BridgedBeefyValidatorIdToMerkleLeaf::::convert) .collect::>(); let next_validator_addresses_root: BeefyMmrHash = - beefy_merkle_root::, _, _>(next_validator_addresses).into(); + beefy_merkle_root::, _, _>(next_validator_addresses); ensure!( next_validator_addresses_root == raw_mmr_leaf.beefy_next_authority_set.root, Error::::InvalidNextValidatorSetRoot @@ -147,11 +147,7 @@ fn decode_raw_mmr_leaf, I: 'static>( // this shall never happen, because (as of now) leaf version is simple `u8` // and we can't fail to decode `u8`. So this is here to support potential // future changes - log::error!( - target: "runtime::bridge-beefy", - "MMR leaf version decode has failed with error: {:?}", - e, - ); + log::error!(target: LOG_TARGET, "MMR leaf version decode has failed with error: {:?}", e,); Error::::FailedToDecodeMmrLeafVersion })?; @@ -162,11 +158,7 @@ fn decode_raw_mmr_leaf, I: 'static>( // decode the whole leaf BridgedBeefyMmrLeaf::::decode(&mut &encoded_leaf[..]).map_err(|e| { - log::error!( - target: "runtime::bridge-beefy", - "MMR leaf decode has failed with error: {:?}", - e, - ); + log::error!(target: LOG_TARGET, "MMR leaf decode has failed with error: {:?}", e,); Error::::FailedToDecodeMmrLeaf }) @@ -283,7 +275,7 @@ mod tests { .custom_header() .customize_leaf(|leaf| { let mut raw_leaf = BridgedRawMmrLeaf::decode(&mut &leaf.leaf()[..]).unwrap(); - raw_leaf.parent_number_and_hash.0 = raw_leaf.parent_number_and_hash.0 + 1; + raw_leaf.parent_number_and_hash.0 += 1; leaf.set_leaf(raw_leaf.encode()) }) .finalize() diff --git a/modules/beefy/src/lib.rs b/modules/beefy/src/lib.rs index 9389265d0cc..bfdf7e17fa4 100644 --- a/modules/beefy/src/lib.rs +++ b/modules/beefy/src/lib.rs @@ -41,13 +41,22 @@ #![cfg_attr(not(feature = "std"), no_std)] use bp_beefy::{BeefyMmrProof, ChainWithBeefy, InitializationData}; -use frame_system::RawOrigin; -use sp_runtime::traits::BadOrigin; use sp_std::prelude::*; // Re-export in crate namespace for `construct_runtime!` pub use pallet::*; +mod commitment; +mod leaf; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod mock_chain; + +/// The target that will be used when publishing logs related to this pallet. +pub const LOG_TARGET: &str = "runtime::bridge-beefy"; + /// Configured bridged chain. pub type BridgedChain = >::BridgedChain; /// Block number, used by configured bridged chain. @@ -77,17 +86,10 @@ pub type BridgedBeefyValidatorIdToMerkleLeaf = pub type ImportedCommitment = bp_beefy::ImportedCommitment, BridgedBlockHash>; -mod commitment; -mod leaf; - -#[cfg(test)] -mod mock; -#[cfg(test)] -mod mock_chain; - #[frame_support::pallet] pub mod pallet { use super::*; + use bp_runtime::{BasicOperatingMode, OwnedBridgeModule}; use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; @@ -135,6 +137,13 @@ pub mod pallet { } } + impl, I: 'static> OwnedBridgeModule for Pallet { + const LOG_TARGET: &'static str = LOG_TARGET; + type OwnerStorage = PalletOwner; + type OperatingMode = BasicOperatingMode; + type OperatingModeStorage = PalletOperatingMode; + } + #[pallet::call] impl, I: 'static> Pallet where @@ -146,53 +155,32 @@ pub mod pallet { origin: OriginFor, init_data: InitializationDataOf, ) -> DispatchResult { - ensure_owner_or_root::(origin)?; + Self::ensure_owner_or_root(origin)?; let init_allowed = !>::exists(); ensure!(init_allowed, >::AlreadyInitialized); - log::info!(target: "runtime::bridge-beefy", "Initializing bridge BEEFY pallet: {:?}", init_data); - Ok(initialize::(init_data)?.into()) + log::info!(target: LOG_TARGET, "Initializing bridge BEEFY pallet: {:?}", init_data); + Ok(initialize::(init_data)?) } - /// Halt or resume all pallet operations. + /// Change `PalletOwner`. /// /// May only be called either by root, or by `PalletOwner`. #[pallet::weight((T::DbWeight::get().reads_writes(1, 1), DispatchClass::Operational))] - pub fn set_operational(origin: OriginFor, operational: bool) -> DispatchResult { - ensure_owner_or_root::(origin)?; - >::put(!operational); - - if operational { - log::info!(target: "runtime::bridge-beefy", "Resuming pallet operations"); - } else { - log::warn!(target: "runtime::bridge-beefy", "Stopping pallet operations"); - } - - Ok(().into()) + pub fn set_owner(origin: OriginFor, new_owner: Option) -> DispatchResult { + >::set_owner(origin, new_owner) } - /// Change `PalletOwner`. + /// Halt or resume all pallet operations. /// /// May only be called either by root, or by `PalletOwner`. #[pallet::weight((T::DbWeight::get().reads_writes(1, 1), DispatchClass::Operational))] - pub fn set_owner( + pub fn set_operating_mode( origin: OriginFor, - new_owner: Option, - ) -> DispatchResultWithPostInfo { - ensure_owner_or_root::(origin)?; - match new_owner { - Some(new_owner) => { - PalletOwner::::put(&new_owner); - log::info!(target: "runtime::bridge-beefy", "Setting pallet Owner to: {:?}", new_owner); - }, - None => { - PalletOwner::::kill(); - log::info!(target: "runtime::bridge-beefy", "Removed Owner of pallet."); - }, - } - - Ok(().into()) + operating_mode: BasicOperatingMode, + ) -> DispatchResult { + >::set_operating_mode(origin, operating_mode) } /// Submit commitment, generated by BEEFY validators. @@ -209,8 +197,8 @@ pub mod pallet { encoded_mmr_proof: Vec, mmr_leaf: BridgedBeefyMmrLeafUnpacked, ) -> DispatchResult { - ensure_operational::()?; - let _ = ensure_signed(origin)?; + Self::ensure_not_halted().map_err(Error::::BridgeModule)?; + ensure_signed(origin)?; ensure!(Self::request_count() < T::MaxRequests::get(), >::TooManyRequests); @@ -224,7 +212,7 @@ pub mod pallet { BridgedBeefySignedCommitment::::decode(&mut &encoded_commitment[..]) .map_err(|e| { log::error!( - target: "runtime::bridge-beefy", + target: LOG_TARGET, "Signed commitment decode has failed with error: {:?}", e, ); @@ -233,7 +221,7 @@ pub mod pallet { })?; log::trace!( - target: "runtime::bridge-beefy", + target: LOG_TARGET, "Importing commitment for block {:?}: {:?}", commitment.commitment.block_number, commitment, @@ -247,11 +235,7 @@ pub mod pallet { // MMR proof verification let mmr_proof = BeefyMmrProof::decode(&mut &encoded_mmr_proof[..]).map_err(|e| { - log::error!( - target: "runtime::bridge-beefy", - "MMR proof decode has failed with error: {:?}", - e, - ); + log::error!(target: LOG_TARGET, "MMR proof decode has failed with error: {:?}", e,); Error::::FailedToDecodeArgument })?; @@ -270,7 +254,7 @@ pub mod pallet { let next_validator_set = NextValidatorSet::::get().ok_or(Error::::NotInitialized)?; log::info!( - target: "runtime::bridge-beefy", + target: LOG_TARGET, "Enacting new BEEFY validator set #{} with {} validators. Next validator set: #{} with {} validators.", next_validator_set.id(), next_validator_set.len(), @@ -301,12 +285,12 @@ pub mod pallet { (index + 1) % T::CommitmentsToKeep::get(), ); if let Ok(commitment_number) = to_prune { - log::debug!(target: "runtime::bridge-beefy", "Pruning old commitment: {:?}.", commitment_number); + log::debug!(target: LOG_TARGET, "Pruning old commitment: {:?}.", commitment_number); ImportedCommitments::::remove(commitment_number); } log::info!( - target: "runtime::bridge-beefy", + target: LOG_TARGET, "Successfully imported commitment for block {:?}", commitment.commitment.block_number, ); @@ -366,9 +350,12 @@ pub mod pallet { pub type PalletOwner, I: 'static = ()> = StorageValue<_, T::AccountId, OptionQuery>; - /// If true, all pallet transactions (except `set_operational`) are failed immediately. + /// The current operating mode of the pallet. + /// + /// Depending on the mode either all, or no transactions will be allowed. #[pallet::storage] - pub(super) type IsHalted, I: 'static = ()> = StorageValue<_, bool, ValueQuery>; + pub type PalletOperatingMode, I: 'static = ()> = + StorageValue<_, BasicOperatingMode, ValueQuery>; #[pallet::genesis_config] pub struct GenesisConfig, I: 'static = ()> { @@ -398,7 +385,7 @@ pub mod pallet { } else { // Since the bridge hasn't been initialized we shouldn't allow anyone to perform // transactions. - >::put(true); + >::put(BasicOperatingMode::Halted); } } } @@ -411,8 +398,6 @@ pub mod pallet { InvalidCurrentValidatorSet, /// Invalid initial next validator set. InvalidNextValidatorSet, - /// All pallet operations are halted. - Halted, /// There are too many requests for the current window to handle. TooManyRequests, /// Failed to decode method arguments (will be removed once `TypeInfo` will be @@ -450,6 +435,8 @@ pub mod pallet { InvalidNextValidatorSetRoot, /// Next validator set is empty. EmptyNextValidatorSet, + /// Error generated by the `OwnedBridgeModule` trait. + BridgeModule(bp_runtime::OwnedBridgeModuleError), } /// Initialize pallet with given parameters. @@ -467,41 +454,24 @@ pub mod pallet { ) .ok_or(Error::::InvalidNextValidatorSet)?; - IsHalted::::put(init_data.is_halted); + >::put(init_data.operating_mode); BestBlockNumber::::put(init_data.best_beefy_block_number); CurrentValidatorSet::::put(current_set); NextValidatorSet::::put(next_set); Ok(()) } - - /// Ensure that the origin is either root, or `PalletOwner`. - fn ensure_owner_or_root, I: 'static>(origin: T::Origin) -> Result<(), BadOrigin> { - match origin.into() { - Ok(RawOrigin::Root) => Ok(()), - Ok(RawOrigin::Signed(ref signer)) - if Some(signer) == >::get().as_ref() => - Ok(()), - _ => Err(BadOrigin), - } - } - - /// Ensure that the pallet is in operational mode (not halted). - fn ensure_operational, I: 'static>() -> Result<(), Error> { - if >::get() { - Err(>::Halted) - } else { - Ok(()) - } - } } #[cfg(test)] mod tests { use super::*; + use bp_runtime::{BasicOperatingMode, OwnedBridgeModuleError}; + use bp_test_utils::generate_owned_bridge_module_tests; use frame_support::{assert_noop, assert_ok, traits::Get}; use mock::*; use mock_chain::*; + use sp_runtime::{traits::BadOrigin, DispatchError}; fn next_block() { use frame_support::traits::OnInitialize; @@ -527,7 +497,7 @@ mod tests { Pallet::::initialize( Origin::signed(10), InitializationData { - is_halted: false, + operating_mode: BasicOperatingMode::Normal, best_beefy_block_number: 0, current_validator_set: (0, validator_ids(0, 1)), next_validator_set: (1, validator_ids(0, 1)), @@ -544,7 +514,7 @@ mod tests { assert_ok!(Pallet::::initialize( Origin::root(), InitializationData { - is_halted: false, + operating_mode: BasicOperatingMode::Normal, best_beefy_block_number: 0, current_validator_set: (0, validator_ids(0, 1)), next_validator_set: (1, validator_ids(0, 1)), @@ -562,7 +532,7 @@ mod tests { assert_ok!(Pallet::::initialize( Origin::signed(10), InitializationData { - is_halted: false, + operating_mode: BasicOperatingMode::Normal, best_beefy_block_number: 0, current_validator_set: (0, validator_ids(0, 1)), next_validator_set: (1, validator_ids(0, 1)), @@ -580,7 +550,7 @@ mod tests { Pallet::::initialize( Origin::root(), InitializationData { - is_halted: false, + operating_mode: BasicOperatingMode::Normal, best_beefy_block_number: 0, current_validator_set: (0, validator_ids(0, 1)), next_validator_set: (1, validator_ids(0, 1)), @@ -598,7 +568,7 @@ mod tests { Pallet::::initialize( Origin::root(), InitializationData { - is_halted: false, + operating_mode: BasicOperatingMode::Normal, best_beefy_block_number: 0, current_validator_set: (0, Vec::new()), next_validator_set: (1, validator_ids(0, 1)), @@ -616,7 +586,7 @@ mod tests { Pallet::::initialize( Origin::root(), InitializationData { - is_halted: false, + operating_mode: BasicOperatingMode::Normal, best_beefy_block_number: 0, current_validator_set: (0, validator_ids(0, 1)), next_validator_set: (1, Vec::new()), @@ -631,74 +601,25 @@ mod tests { fn fails_to_change_operation_mode_if_not_owner_and_root() { run_test_with_initialize(1, || { assert_noop!( - Pallet::::set_operational(Origin::signed(10), false), + Pallet::::set_operating_mode( + Origin::signed(10), + BasicOperatingMode::Halted + ), BadOrigin, ); }); } - #[test] - fn root_is_able_to_change_operation_mode() { - run_test_with_initialize(1, || { - assert_ok!(Pallet::::set_operational(Origin::root(), false)); - assert_eq!(IsHalted::::get(), true); - - assert_ok!(Pallet::::set_operational(Origin::root(), true)); - assert_eq!(IsHalted::::get(), false); - }); - } - - #[test] - fn owner_is_able_to_change_operation_mode() { - run_test_with_initialize(1, || { - PalletOwner::::put(10); - - assert_ok!(Pallet::::set_operational(Origin::signed(10), false)); - assert_eq!(IsHalted::::get(), true); - - assert_ok!(Pallet::::set_operational(Origin::signed(10), true)); - assert_eq!(IsHalted::::get(), false); - }); - } - - #[test] - fn fails_to_set_owner_if_not_owner_and_root() { - run_test_with_initialize(1, || { - assert_noop!(Pallet::::set_owner(Origin::signed(10), Some(42)), BadOrigin,); - }); - } - - #[test] - fn root_is_able_to_set_owner() { - run_test_with_initialize(1, || { - assert_ok!(Pallet::::set_owner(Origin::root(), Some(42))); - assert_eq!(PalletOwner::::get(), Some(42)); - - assert_ok!(Pallet::::set_owner(Origin::root(), None)); - assert_eq!(PalletOwner::::get(), None); - }); - } - - #[test] - fn owner_is_able_to_set_owner() { - run_test_with_initialize(1, || { - PalletOwner::::put(10); - - assert_ok!(Pallet::::set_owner(Origin::signed(10), Some(42))); - assert_eq!(PalletOwner::::get(), Some(42)); - - assert_ok!(Pallet::::set_owner(Origin::signed(42), None)); - assert_eq!(PalletOwner::::get(), None); - }); - } - #[test] fn fails_to_import_commitment_if_halted() { run_test_with_initialize(1, || { - assert_ok!(Pallet::::set_operational(Origin::root(), false)); + assert_ok!(Pallet::::set_operating_mode( + Origin::root(), + BasicOperatingMode::Halted + )); assert_noop!( import_commitment(ChainBuilder::new(1).append_finalized_header().to_header()), - Error::::Halted, + Error::::BridgeModule(OwnedBridgeModuleError::Halted), ); }) } @@ -853,4 +774,6 @@ mod tests { assert!(ImportedCommitments::::get(2).is_none()); }); } + + generate_owned_bridge_module_tests!(BasicOperatingMode::Normal, BasicOperatingMode::Halted); } diff --git a/modules/beefy/src/mock.rs b/modules/beefy/src/mock.rs index 6887167d27a..d562c889dc0 100644 --- a/modules/beefy/src/mock.rs +++ b/modules/beefy/src/mock.rs @@ -17,11 +17,11 @@ use crate as beefy; use crate::{ BridgedBeefyCommitmentHasher, BridgedBeefyMmrHasher, BridgedBeefyMmrLeafUnpacked, - BridgedBeefySignedCommitment, BridgedBeefyValidatorIdToMerkleLeaf, + BridgedBeefySignedCommitment, BridgedBeefyValidatorIdToMerkleLeaf, LOG_TARGET, }; use bp_beefy::{BeefyMmrHash, ChainWithBeefy, Commitment, MmrDataOrHash}; -use bp_runtime::Chain; +use bp_runtime::{BasicOperatingMode, Chain}; use codec::Encode; use frame_support::{construct_runtime, parameter_types, weights::Weight}; use libsecp256k1::{sign, Message, PublicKey, SecretKey}; @@ -43,8 +43,12 @@ pub type BridgedCommitment = BridgedBeefySignedCommitment; pub type BridgedCommitmentHasher = BridgedBeefyCommitmentHasher; pub type BridgedMmrHasher = BridgedBeefyMmrHasher; pub type BridgedMmrLeaf = BridgedBeefyMmrLeafUnpacked; -pub type BridgedRawMmrLeaf = - beefy_primitives::mmr::MmrLeaf; +pub type BridgedRawMmrLeaf = beefy_primitives::mmr::MmrLeaf< + BridgedBlockNumber, + BridgedBlockHash, + BeefyMmrHash, + BeefyMmrHash, +>; pub type BridgedMmrNode = MmrDataOrHash; pub type BridgedValidatorIdToMerkleLeaf = BridgedBeefyValidatorIdToMerkleLeaf; @@ -146,7 +150,7 @@ pub fn run_test_with_initialize(initial_validators_count: usize, test: impl F crate::Pallet::::initialize( Origin::root(), bp_beefy::InitializationData { - is_halted: false, + operating_mode: BasicOperatingMode::Normal, best_beefy_block_number: 0, current_validator_set: (0, validator_ids(0, initial_validators_count)), next_validator_set: (1, validator_ids(0, initial_validators_count)), @@ -226,10 +230,10 @@ pub fn sign_commitment( let mut raw_signature_with_recovery = [recovery_id.serialize(); 65]; raw_signature_with_recovery[..64].copy_from_slice(&signature.serialize()); log::trace!( - target: "runtime::bridge-beefy", + target: LOG_TARGET, "Validator {} ({:?}) has signed commitment hash ({:?}): {:?}", validator, - hex::encode(validator_key_to_public(validator_key.clone()).serialize_compressed()), + hex::encode(validator_key_to_public(*validator_key).serialize_compressed()), hex::encode(commitment_hash.serialize()), hex::encode(signature.serialize()), ); diff --git a/modules/beefy/src/mock_chain.rs b/modules/beefy/src/mock_chain.rs index d248c7352c3..9c7041af323 100644 --- a/modules/beefy/src/mock_chain.rs +++ b/modules/beefy/src/mock_chain.rs @@ -22,6 +22,7 @@ use crate::mock::{ BridgedValidatorIdToMerkleLeaf, EXPECTED_MMR_LEAF_MAJOR_VERSION, }; +use crate::LOG_TARGET; use beefy_primitives::mmr::{BeefyNextAuthoritySet, MmrLeafVersion}; use bp_beefy::{ BeefyMmrHash, BeefyMmrProof, BeefyPayload, Commitment, ValidatorSetId, MMR_ROOT_PAYLOAD_ID, @@ -139,8 +140,7 @@ impl ChainBuilder { next_validators_len, ); - HeaderBuilder::with_chain(self, true, new_validator_set_id, new_validator_keys.clone()) - .finalize() + HeaderBuilder::with_chain(self, true, new_validator_set_id, new_validator_keys).finalize() } /// Append single default header without commitment. @@ -239,7 +239,7 @@ impl HeaderBuilder { let raw_leaf_hash = BridgedMmrHasher::hash(self.leaf.leaf()); let node = BridgedMmrNode::Hash(raw_leaf_hash.into()); log::trace!( - target: "runtime::bridge-beefy", + target: LOG_TARGET, "Inserting MMR leaf with hash {} for header {}", node.hash(), self.header.number(), @@ -257,7 +257,7 @@ impl HeaderBuilder { items: proof.proof_items().iter().map(|i| i.hash().to_fixed_bytes()).collect(), })); log::trace!( - target: "runtime::bridge-beefy", + target: LOG_TARGET, "Proof of leaf {}/{} (for header {}) has {} items. Root: {}", leaf_index, leaf_count, @@ -276,7 +276,7 @@ impl HeaderBuilder { } if let Some(new_validator_keys) = self.new_validator_keys { - self.chain.validator_set_id = self.chain.validator_set_id + 1; + self.chain.validator_set_id += 1; self.chain.validator_keys = self.chain.next_validator_keys; self.chain.next_validator_keys = new_validator_keys; } diff --git a/primitives/beefy/src/lib.rs b/primitives/beefy/src/lib.rs index 585ab923bfa..fb61972ee21 100644 --- a/primitives/beefy/src/lib.rs +++ b/primitives/beefy/src/lib.rs @@ -28,10 +28,12 @@ pub use beefy_primitives::{ ValidatorSetId, BEEFY_ENGINE_ID, }; pub use pallet_beefy_mmr::BeefyEcdsaToEthereum; -pub use pallet_mmr::verify_leaf_proof as verify_mmr_leaf_proof; -pub use pallet_mmr::primitives::{DataOrHash as MmrDataOrHash, Proof as MmrProof}; +pub use pallet_mmr::{ + primitives::{DataOrHash as MmrDataOrHash, Proof as MmrProof}, + verify_leaf_proof as verify_mmr_leaf_proof, +}; -use bp_runtime::{BlockNumberOf, Chain, HashOf}; +use bp_runtime::{BasicOperatingMode, BlockNumberOf, Chain, HashOf}; use codec::{Decode, Encode}; use frame_support::Parameter; use scale_info::TypeInfo; @@ -105,12 +107,12 @@ impl BeefyRuntimeAppPublic for beefy_primitives::crypto::AuthorityId { // why it is here: // // 1) we need to call `sp_io::crypto::ecdsa_verify_prehashed` to be sure that the host - // function is used to verify signature; + // function is used to verify signature; // 2) there's no explicit conversions from app-crypto sig+key types to matching underlying - // types; 3) `ecdsa_verify_prehashed` works with underlying ECDSA types; + // types; + // 3) `ecdsa_verify_prehashed` works with underlying ECDSA types; // 4) hence this "convert". - const PROOF: &'static str = - "static assertion guarantees that both underlying types are equal; \ + const PROOF: &str = "static assertion guarantees that both underlying types are equal; \ conversion between same types can't fail; \ qed"; let ecdsa_signature = sp_core::ecdsa::Signature::try_from(sig.as_ref()).expect(PROOF); @@ -242,8 +244,8 @@ impl BeefyMmrLeafUnpacked { #[derive(Encode, Decode, RuntimeDebug, PartialEq, Eq, Clone, TypeInfo)] #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub struct InitializationData { - /// Should the pallet block transaction immediately after initialization. - pub is_halted: bool, + /// Pallet operating mode. + pub operating_mode: BasicOperatingMode, /// Number of the best block, finalized by BEEFY. pub best_beefy_block_number: BlockNumber, /// BEEFY validator set that will be finalizing descendants of the `best_beefy_block_number`