BEEFY: Simplify hashing for pallet-beefy-mmr (#12393)

* beefy-mmr: reuse sp_runtime::traits::Keccak256

* beefy-mmr: use sp_runtime::traits:Hash for generating merkle proofs

* beefy-mmr: use sp_runtime::traits:Hash for validating merkle proofs

* beefy-mmr: remove primitives::Hasher and primitives::Hash

* fixes

* beefy-mmr: reduce the number of generic parameters for merkle_root()

* fix

* compute upper Vec capacity more accurately
This commit is contained in:
Serban Iorga
2022-10-04 11:47:13 +03:00
committed by GitHub
parent ecc4d5f258
commit a35da130ce
5 changed files with 118 additions and 158 deletions
+7 -20
View File
@@ -33,7 +33,7 @@
//!
//! and thanks to versioning can be easily updated in the future.
use sp_runtime::traits::{Convert, Hash, Member};
use sp_runtime::traits::{Convert, Member};
use sp_std::prelude::*;
use beefy_primitives::{
@@ -142,10 +142,7 @@ pub mod pallet {
StorageValue<_, BeefyNextAuthoritySet<MerkleRootOf<T>>, ValueQuery>;
}
impl<T: Config> LeafDataProvider for Pallet<T>
where
MerkleRootOf<T>: From<beefy_merkle_tree::Hash> + Into<beefy_merkle_tree::Hash>,
{
impl<T: Config> LeafDataProvider for Pallet<T> {
type LeafData = MmrLeaf<
<T as frame_system::Config>::BlockNumber,
<T as frame_system::Config>::Hash,
@@ -163,19 +160,9 @@ where
}
}
impl<T: Config> beefy_merkle_tree::Hasher for Pallet<T>
where
MerkleRootOf<T>: Into<beefy_merkle_tree::Hash>,
{
fn hash(data: &[u8]) -> beefy_merkle_tree::Hash {
<T as pallet_mmr::Config>::Hashing::hash(data).into()
}
}
impl<T> beefy_primitives::OnNewValidatorSet<<T as pallet_beefy::Config>::BeefyId> for Pallet<T>
where
T: pallet::Config,
MerkleRootOf<T>: From<beefy_merkle_tree::Hash> + Into<beefy_merkle_tree::Hash>,
{
/// Compute and cache BEEFY authority sets based on updated BEEFY validator sets.
fn on_new_validator_set(
@@ -190,10 +177,7 @@ where
}
}
impl<T: Config> Pallet<T>
where
MerkleRootOf<T>: From<beefy_merkle_tree::Hash> + Into<beefy_merkle_tree::Hash>,
{
impl<T: Config> Pallet<T> {
/// Return the currently active BEEFY authority set proof.
pub fn authority_set_proof() -> BeefyAuthoritySet<MerkleRootOf<T>> {
Pallet::<T>::beefy_authorities()
@@ -220,7 +204,10 @@ where
.map(T::BeefyAuthorityToMerkleLeaf::convert)
.collect::<Vec<_>>();
let len = beefy_addresses.len() as u32;
let root = beefy_merkle_tree::merkle_root::<Self, _, _>(beefy_addresses).into();
let root = beefy_merkle_tree::merkle_root::<<T as pallet_mmr::Config>::Hashing, _>(
beefy_addresses,
)
.into();
BeefyAuthoritySet { id, len, root }
}
}
+2 -1
View File
@@ -147,9 +147,10 @@ impl BeefyDataProvider<Vec<u8>> for DummyDataProvider {
fn extra_data() -> Vec<u8> {
let mut col = vec![(15, vec![1, 2, 3]), (5, vec![4, 5, 6])];
col.sort();
beefy_merkle_tree::merkle_root::<crate::Pallet<Test>, _, _>(
beefy_merkle_tree::merkle_root::<<Test as pallet_mmr::Config>::Hashing, _>(
col.into_iter().map(|pair| pair.encode()),
)
.as_ref()
.to_vec()
}
}