Kill the light client, CHTs and change tries. (#10080)

* Remove light client, change tries and CHTs

* Update tests

* fmt

* Restore changes_root

* Fixed benches

* Cargo fmt

* fmt

* fmt
This commit is contained in:
Arkadiy Paronyan
2021-11-12 14:15:01 +01:00
committed by GitHub
parent 112b7dac47
commit 4cbbf0cf43
141 changed files with 532 additions and 17807 deletions
+2 -2
View File
@@ -151,7 +151,7 @@ impl<T: Config> Pallet<T> {
fn change_authorities(new: WeakBoundedVec<T::AuthorityId, T::MaxAuthorities>) {
<Authorities<T>>::put(&new);
let log: DigestItem<T::Hash> = DigestItem::Consensus(
let log = DigestItem::Consensus(
AURA_ENGINE_ID,
ConsensusLog::AuthoritiesChange(new.into_inner()).encode(),
);
@@ -222,7 +222,7 @@ impl<T: Config> OneSessionHandler<T::AccountId> for Pallet<T> {
}
fn on_disabled(i: u32) {
let log: DigestItem<T::Hash> = DigestItem::Consensus(
let log = DigestItem::Consensus(
AURA_ENGINE_ID,
ConsensusLog::<T::AuthorityId>::OnDisabled(i as AuthorityIndex).encode(),
);
+1 -1
View File
@@ -633,7 +633,7 @@ impl<T: Config> Pallet<T> {
}
fn deposit_consensus<U: Encode>(new: U) {
let log: DigestItem<T::Hash> = DigestItem::Consensus(BABE_ENGINE_ID, new.encode());
let log = DigestItem::Consensus(BABE_ENGINE_ID, new.encode());
<frame_system::Pallet<T>>::deposit_log(log.into())
}
+1 -1
View File
@@ -40,7 +40,7 @@ fn init_block(block: u64) {
BeefyMmr::on_initialize(block);
}
pub fn beefy_log(log: ConsensusLog<BeefyId>) -> DigestItem<H256> {
pub fn beefy_log(log: ConsensusLog<BeefyId>) -> DigestItem {
DigestItem::Consensus(BEEFY_ENGINE_ID, log.encode())
}
+2 -2
View File
@@ -110,7 +110,7 @@ impl<T: Config> Pallet<T> {
let next_id = Self::validator_set_id() + 1u64;
<ValidatorSetId<T>>::put(next_id);
let log: DigestItem<T::Hash> = DigestItem::Consensus(
let log = DigestItem::Consensus(
BEEFY_ENGINE_ID,
ConsensusLog::AuthoritiesChange(ValidatorSet { validators: new, id: next_id })
.encode(),
@@ -163,7 +163,7 @@ impl<T: Config> OneSessionHandler<T::AccountId> for Pallet<T> {
}
fn on_disabled(i: u32) {
let log: DigestItem<T::Hash> = DigestItem::Consensus(
let log = DigestItem::Consensus(
BEEFY_ENGINE_ID,
ConsensusLog::<T::BeefyId>::OnDisabled(i as AuthorityIndex).encode(),
);
+1 -2
View File
@@ -20,7 +20,6 @@ use std::vec;
use beefy_primitives::ValidatorSet;
use codec::Encode;
use sp_core::H256;
use sp_runtime::DigestItem;
use frame_support::traits::OnInitialize;
@@ -32,7 +31,7 @@ fn init_block(block: u64) {
Session::on_initialize(block);
}
pub fn beefy_log(log: ConsensusLog<BeefyId>) -> DigestItem<H256> {
pub fn beefy_log(log: ConsensusLog<BeefyId>) -> DigestItem {
DigestItem::Consensus(BEEFY_ENGINE_ID, log.encode())
}
+3 -4
View File
@@ -125,7 +125,6 @@ use frame_support::{
},
weights::{DispatchClass, DispatchInfo, GetDispatchInfo},
};
use frame_system::DigestOf;
use sp_runtime::{
generic::Digest,
traits::{
@@ -281,8 +280,8 @@ where
Self::initialize_block_impl(header.number(), header.parent_hash(), &digests);
}
fn extract_pre_digest(header: &System::Header) -> DigestOf<System> {
let mut digest = <DigestOf<System>>::default();
fn extract_pre_digest(header: &System::Header) -> Digest {
let mut digest = <Digest>::default();
header.digest().logs().iter().for_each(|d| {
if d.as_pre_runtime().is_some() {
digest.push(d.clone())
@@ -294,7 +293,7 @@ where
fn initialize_block_impl(
block_number: &System::BlockNumber,
parent_hash: &System::Hash,
digest: &Digest<System::Hash>,
digest: &Digest,
) {
let mut weight = 0;
if Self::runtime_upgraded() {
+1 -1
View File
@@ -508,7 +508,7 @@ impl<T: Config> Pallet<T> {
/// Deposit one of this module's logs.
fn deposit_log(log: ConsensusLog<T::BlockNumber>) {
let log: DigestItem<T::Hash> = DigestItem::Consensus(GRANDPA_ENGINE_ID, log.encode());
let log = DigestItem::Consensus(GRANDPA_ENGINE_ID, log.encode());
<frame_system::Pallet<T>>::deposit_log(log.into());
}
+1 -1
View File
@@ -254,7 +254,7 @@ impl Config for Test {
type MaxAuthorities = MaxAuthorities;
}
pub fn grandpa_log(log: ConsensusLog<u64>) -> DigestItem<H256> {
pub fn grandpa_log(log: ConsensusLog<u64>) -> DigestItem {
DigestItem::Consensus(GRANDPA_ENGINE_ID, log.encode())
}
+7 -10
View File
@@ -1223,7 +1223,7 @@ mod private {
pub trait Sealed {}
impl<T: Encode> Sealed for Vec<T> {}
impl<Hash: Encode> Sealed for Digest<Hash> {}
impl Sealed for Digest {}
impl<T, S> Sealed for BoundedVec<T, S> {}
impl<T, S> Sealed for WeakBoundedVec<T, S> {}
impl<K, V, S> Sealed for bounded_btree_map::BoundedBTreeMap<K, V, S> {}
@@ -1263,7 +1263,7 @@ impl<T: Encode> StorageDecodeLength for Vec<T> {}
/// We abuse the fact that SCALE does not put any marker into the encoding, i.e. we only encode the
/// internal vec and we can append to this vec. We have a test that ensures that if the `Digest`
/// format ever changes, we need to remove this here.
impl<Hash: Encode> StorageAppend<DigestItem<Hash>> for Digest<Hash> {}
impl StorageAppend<DigestItem> for Digest {}
/// Marker trait that is implemented for types that support the `storage::append` api with a limit
/// on the number of element.
@@ -1484,8 +1484,8 @@ mod test {
fn digest_storage_append_works_as_expected() {
TestExternalities::default().execute_with(|| {
struct Storage;
impl generator::StorageValue<Digest<u32>> for Storage {
type Query = Digest<u32>;
impl generator::StorageValue<Digest> for Storage {
type Query = Digest;
fn module_prefix() -> &'static [u8] {
b"MyModule"
@@ -1495,23 +1495,20 @@ mod test {
b"Storage"
}
fn from_optional_value_to_query(v: Option<Digest<u32>>) -> Self::Query {
fn from_optional_value_to_query(v: Option<Digest>) -> Self::Query {
v.unwrap()
}
fn from_query_to_optional_value(v: Self::Query) -> Option<Digest<u32>> {
fn from_query_to_optional_value(v: Self::Query) -> Option<Digest> {
Some(v)
}
}
Storage::append(DigestItem::ChangesTrieRoot(1));
Storage::append(DigestItem::Other(Vec::new()));
let value = unhashed::get_raw(&Storage::storage_value_final_key()).unwrap();
let expected = Digest {
logs: vec![DigestItem::ChangesTrieRoot(1), DigestItem::Other(Vec::new())],
};
let expected = Digest { logs: vec![DigestItem::Other(Vec::new())] };
assert_eq!(Digest::decode(&mut &value[..]).unwrap(), expected);
});
}
+2 -19
View File
@@ -22,8 +22,8 @@
use codec::Encode;
use frame_benchmarking::{benchmarks, whitelisted_caller};
use frame_support::{storage, traits::Get, weights::DispatchClass};
use frame_system::{Call, DigestItemOf, Pallet as System, RawOrigin};
use sp_core::{storage::well_known_keys, ChangesTrieConfiguration};
use frame_system::{Call, Pallet as System, RawOrigin};
use sp_core::storage::well_known_keys;
use sp_runtime::traits::Hash;
use sp_std::{prelude::*, vec};
@@ -62,23 +62,6 @@ benchmarks! {
assert_eq!(current_code.len(), 4_000_000 as usize);
}
set_changes_trie_config {
let d = 1000;
let digest_item = DigestItemOf::<T>::Other(vec![]);
for i in 0 .. d {
System::<T>::deposit_log(digest_item.clone());
}
let changes_trie_config = ChangesTrieConfiguration {
digest_interval: d,
digest_levels: d,
};
}: _(RawOrigin::Root, Some(changes_trie_config))
verify {
assert_eq!(System::<T>::digest().logs.len(), (d + 1) as usize)
}
#[skip_meta]
set_storage {
let i in 1 .. 1000;
+6 -58
View File
@@ -95,7 +95,7 @@ use frame_support::{
Parameter,
};
use scale_info::TypeInfo;
use sp_core::{storage::well_known_keys, ChangesTrieConfiguration};
use sp_core::storage::well_known_keys;
#[cfg(feature = "std")]
use frame_support::traits::GenesisBuild;
@@ -405,37 +405,6 @@ pub mod pallet {
Ok(().into())
}
/// Set the new changes trie configuration.
///
/// # <weight>
/// - `O(1)`
/// - 1 storage write or delete (codec `O(1)`).
/// - 1 call to `deposit_log`: Uses `append` API, so O(1)
/// - Base Weight: 7.218 µs
/// - DB Weight:
/// - Writes: Changes Trie, System Digest
/// # </weight>
#[pallet::weight((T::SystemWeightInfo::set_changes_trie_config(), DispatchClass::Operational))]
pub fn set_changes_trie_config(
origin: OriginFor<T>,
changes_trie_config: Option<ChangesTrieConfiguration>,
) -> DispatchResultWithPostInfo {
ensure_root(origin)?;
match changes_trie_config.clone() {
Some(changes_trie_config) => storage::unhashed::put_raw(
well_known_keys::CHANGES_TRIE_CONFIG,
&changes_trie_config.encode(),
),
None => storage::unhashed::kill(well_known_keys::CHANGES_TRIE_CONFIG),
}
let log = generic::DigestItem::ChangesTrieSignal(
generic::ChangesTrieSignal::NewConfiguration(changes_trie_config),
);
Self::deposit_log(log.into());
Ok(().into())
}
/// Set some items of storage.
///
/// # <weight>
@@ -617,7 +586,7 @@ pub mod pallet {
/// Digest of the current block, also part of the block header.
#[pallet::storage]
#[pallet::getter(fn digest)]
pub(super) type Digest<T: Config> = StorageValue<_, DigestOf<T>, ValueQuery>;
pub(super) type Digest<T: Config> = StorageValue<_, generic::Digest, ValueQuery>;
/// Events deposited for the current block.
///
@@ -666,7 +635,6 @@ pub mod pallet {
#[pallet::genesis_config]
pub struct GenesisConfig {
pub changes_trie_config: Option<ChangesTrieConfiguration>,
#[serde(with = "sp_core::bytes")]
pub code: Vec<u8>,
}
@@ -674,7 +642,7 @@ pub mod pallet {
#[cfg(feature = "std")]
impl Default for GenesisConfig {
fn default() -> Self {
Self { changes_trie_config: Default::default(), code: Default::default() }
Self { code: Default::default() }
}
}
@@ -689,12 +657,6 @@ pub mod pallet {
sp_io::storage::set(well_known_keys::CODE, &self.code);
sp_io::storage::set(well_known_keys::EXTRINSIC_INDEX, &0u32.encode());
if let Some(ref changes_trie_config) = self.changes_trie_config {
sp_io::storage::set(
well_known_keys::CHANGES_TRIE_CONFIG,
&changes_trie_config.encode(),
);
}
}
}
}
@@ -759,9 +721,6 @@ impl GenesisConfig {
}
}
pub type DigestOf<T> = generic::Digest<<T as Config>::Hash>;
pub type DigestItemOf<T> = generic::DigestItem<<T as Config>::Hash>;
pub type Key = Vec<u8>;
pub type KeyValue = (Vec<u8>, Vec<u8>);
@@ -1369,7 +1328,7 @@ impl<T: Config> Pallet<T> {
pub fn initialize(
number: &T::BlockNumber,
parent_hash: &T::Hash,
digest: &DigestOf<T>,
digest: &generic::Digest,
kind: InitKind,
) {
// populate environment
@@ -1409,7 +1368,7 @@ impl<T: Config> Pallet<T> {
// stay to be inspected by the client and will be cleared by `Self::initialize`.
let number = <Number<T>>::get();
let parent_hash = <ParentHash<T>>::get();
let mut digest = <Digest<T>>::get();
let digest = <Digest<T>>::get();
let extrinsics = (0..ExtrinsicCount::<T>::take().unwrap_or_default())
.map(ExtrinsicData::<T>::take)
@@ -1427,17 +1386,6 @@ impl<T: Config> Pallet<T> {
let storage_root = T::Hash::decode(&mut &sp_io::storage::root()[..])
.expect("Node is configured to use the same hash; qed");
let storage_changes_root = sp_io::storage::changes_root(&parent_hash.encode());
// we can't compute changes trie root earlier && put it to the Digest
// because it will include all currently existing temporaries.
if let Some(storage_changes_root) = storage_changes_root {
let item = generic::DigestItem::ChangesTrieRoot(
T::Hash::decode(&mut &storage_changes_root[..])
.expect("Node is configured to use the same hash; qed"),
);
digest.push(item);
}
<T::Header as traits::Header>::new(
number,
@@ -1454,7 +1402,7 @@ impl<T: Config> Pallet<T> {
/// - `O(1)`
/// - 1 storage write (codec `O(1)`)
/// # </weight>
pub fn deposit_log(item: DigestItemOf<T>) {
pub fn deposit_log(item: generic::DigestItem) {
<Digest<T>>::append(item);
}