Skip to content
Snippets Groups Projects
Commit f207f238 authored by Éloïs's avatar Éloïs
Browse files

pallet ud on_initialize weights

parent dc65a0a3
No related branches found
No related tags found
1 merge request!83feat(runtime): create UDs manually with new call universalDividend.claim_uds
......@@ -2,5 +2,6 @@
cucumber = "test -p duniter-end2end-tests --test cucumber_tests --"
sanity-gdev = "test -p duniter-live-tests --test sanity_gdev -- --nocapture"
tu = "test --workspace --exclude duniter-end2end-tests"
tb = "test --features runtime-benchmarks -p"
xtask = "run --package xtask --"
......@@ -27,28 +27,55 @@ use sp_runtime::traits::Bounded;
use crate::Pallet;
const BLOCK_NUMBER: u32 = 2;
const ED_MULTIPLIER: u32 = 10;
const SEED: u32 = 0;
/*fn fill_storage<T: Config>(
members_count: u32,
) -> Result<(), &'static str> {
Ok(())
}*/
benchmarks! {
// TODO add on_initialize_ud_created and on_initialize_ud_reevalued (after manual UD impl)
where_clause {
where
T: pallet_balances::Config, T::Balance: From<u64>,
<T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>
}
on_initialize {
//let n in 1 .. 10_000;
//fill_storage::<T>(n)?;
}: { Pallet::<T>::on_initialize(BLOCK_NUMBER.into()); }
let total_money_created = Pallet::<T>::total_money_created();
}: { Pallet::<T>::on_initialize(1_u32.into()); }
verify {
assert_eq!(Pallet::<T>::total_money_created(), total_money_created);
}
where_clause {
where
T: pallet_balances::Config, T::Balance: From<u64>,
<T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>
}
on_initialize_ud_created {
let block_number = T::UdCreationPeriod::get();
let block_number_plus_one: T::BlockNumber = block_number + One::one();
NextReeval::<T>::put(block_number_plus_one);
}: { Pallet::<T>::on_initialize(block_number.into()); }
verify {
}
where_clause {
where
T: pallet_balances::Config, T::Balance: From<u64>,
<T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>
}
on_initialize_ud_reevalued {
let block_number = T::UdCreationPeriod::get();
let block_number_plus_one: T::BlockNumber = block_number + One::one();
NextReeval::<T>::put(block_number_plus_one);
Pallet::<T>::on_initialize(block_number.into());
NextReeval::<T>::put(block_number);
}: { Pallet::<T>::on_initialize(block_number.into()); }
verify {
}
// Benchmark `transfer_ud` extrinsic with the worst possible conditions:
// * Transfer will kill the sender account.
// * Transfer will create the recipient account.
where_clause { where T: pallet_balances::Config, T::Balance: From<u64>, <T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance> }
where_clause {
where
T: pallet_balances::Config, T::Balance: From<u64>,
<T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>
}
transfer_ud {
let existential_deposit = T::ExistentialDeposit::get();
let caller = whitelisted_caller();
......@@ -94,6 +121,7 @@ benchmarks! {
first_reeval: 8,
first_ud: 1_000,
initial_monetary_mass: 0,
initial_members: Vec::new()
}),
crate::mock::Test
);
......
......@@ -188,21 +188,21 @@ pub mod pallet {
#[pallet::hooks]
impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
fn on_initialize(n: T::BlockNumber) -> Weight {
let mut total_weight = T::WeightInfo::on_initialize();
if (n % T::UdCreationPeriod::get()).is_zero() {
let current_members_count = T::MembersCount::get();
let next_reeval = NextReeval::<T>::get();
if n >= next_reeval {
NextReeval::<T>::put(next_reeval.saturating_add(T::UdReevalPeriod::get()));
total_weight += Self::reeval_ud(current_members_count)
+ Self::create_ud(current_members_count)
+ T::DbWeight::get().reads_writes(2, 1);
Self::reeval_ud(current_members_count);
Self::create_ud(current_members_count);
T::WeightInfo::on_initialize_ud_reevalued()
} else {
total_weight +=
Self::create_ud(current_members_count) + T::DbWeight::get().reads(2);
Self::create_ud(current_members_count);
T::WeightInfo::on_initialize_ud_created()
}
} else {
T::WeightInfo::on_initialize()
}
total_weight
}
}
......@@ -250,9 +250,7 @@ pub mod pallet {
// INTERNAL FUNCTIONS //
impl<T: Config> Pallet<T> {
fn create_ud(members_count: BalanceOf<T>) -> Weight {
let total_weight: Weight = 0;
fn create_ud(members_count: BalanceOf<T>) {
let ud_amount = <CurrentUd<T>>::get();
let monetary_mass = <MonetaryMass<T>>::get();
......@@ -270,8 +268,6 @@ pub mod pallet {
members_count,
monetary_mass: new_monetary_mass,
});
total_weight
}
fn do_claim_uds(who: &T::AccountId) -> DispatchResultWithPostInfo {
T::MembersStorage::try_mutate_exists(who, |maybe_first_eligible_ud| {
......@@ -321,9 +317,7 @@ pub mod pallet {
)?;
Ok(().into())
}
fn reeval_ud(members_count: BalanceOf<T>) -> Weight {
let total_weight: Weight = 0;
fn reeval_ud(members_count: BalanceOf<T>) {
let ud_amount = <CurrentUd<T>>::get();
let monetary_mass = <MonetaryMass<T>>::get();
......@@ -353,8 +347,6 @@ pub mod pallet {
monetary_mass,
members_count,
});
total_weight
}
fn reeval_ud_formula(
ud_t: BalanceOf<T>,
......
......@@ -102,25 +102,6 @@ parameter_types! {
pub const UdReevalPeriod: BlockNumber = 8;
}
pub struct FakeWot;
impl frame_support::traits::StoredMap<u64, FirstEligibleUd> for FakeWot {
fn get(key: &u64) -> FirstEligibleUd {
match key {
1 | 2 | 3 => FirstEligibleUd::min(),
_ => FirstEligibleUd(None),
}
}
fn try_mutate_exists<R, E: From<sp_runtime::DispatchError>>(
key: &u64,
f: impl FnOnce(&mut Option<FirstEligibleUd>) -> Result<R, E>,
) -> Result<R, E> {
match key {
1 | 2 | 3 => f(&mut Some(FirstEligibleUd::min())),
_ => f(&mut None),
}
}
}
impl pallet_universal_dividend::Config for Test {
type BlockNumberIntoBalance = sp_runtime::traits::ConvertInto;
type Currency = pallet_balances::Pallet<Test>;
......
......@@ -21,6 +21,8 @@ use frame_support::weights::{constants::RocksDbWeight, Weight};
/// Weight functions needed for pallet_universal_dividend.
pub trait WeightInfo {
fn on_initialize() -> Weight;
fn on_initialize_ud_created() -> Weight;
fn on_initialize_ud_reevalued() -> Weight;
fn transfer_ud() -> Weight;
fn transfer_ud_keep_alive() -> Weight;
}
......@@ -31,6 +33,27 @@ impl WeightInfo for () {
fn on_initialize() -> Weight {
2_260_000 as Weight
}
// Storage: Membership CounterForMembership (r:1 w:0)
// Storage: UniversalDividend NextReeval (r:1 w:0)
// Storage: UniversalDividend CurrentUd (r:1 w:0)
// Storage: UniversalDividend MonetaryMass (r:1 w:1)
// Storage: UniversalDividend CurrentUdIndex (r:1 w:1)
fn on_initialize_ud_created() -> Weight {
(20_160_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(5 as Weight))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
}
// Storage: Membership CounterForMembership (r:1 w:0)
// Storage: UniversalDividend NextReeval (r:1 w:1)
// Storage: UniversalDividend CurrentUd (r:1 w:1)
// Storage: UniversalDividend MonetaryMass (r:1 w:1)
// Storage: UniversalDividend PastReevals (r:1 w:1)
// Storage: UniversalDividend CurrentUdIndex (r:1 w:1)
fn on_initialize_ud_reevalued() -> Weight {
(32_770_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(6 as Weight))
.saturating_add(RocksDbWeight::get().writes(5 as Weight))
}
// Storage: UniversalDividend CurrentUd (r:1 w:0)
// Storage: System Account (r:1 w:1)
// Storage: Account PendingNewAccounts (r:0 w:1)
......
......@@ -50,6 +50,29 @@ impl<T: frame_system::Config> pallet_universal_dividend::WeightInfo for WeightIn
(104_055_000 as Weight)
.saturating_add(T::DbWeight::get().reads(1 as Weight))
}
// Storage: Parameters ParametersStorage (r:1 w:0)
// Storage: Membership CounterForMembership (r:1 w:0)
// Storage: UniversalDividend NextReeval (r:1 w:0)
// Storage: UniversalDividend CurrentUd (r:1 w:0)
// Storage: UniversalDividend MonetaryMass (r:1 w:1)
// Storage: UniversalDividend CurrentUdIndex (r:1 w:1)
fn on_initialize_ud_created() -> Weight {
(1_000_000_000 as Weight)
.saturating_add(T::DbWeight::get().reads(6 as Weight))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
}
// Storage: Parameters ParametersStorage (r:1 w:0)
// Storage: Membership CounterForMembership (r:1 w:0)
// Storage: UniversalDividend NextReeval (r:1 w:1)
// Storage: UniversalDividend CurrentUd (r:1 w:1)
// Storage: UniversalDividend MonetaryMass (r:1 w:1)
// Storage: UniversalDividend PastReevals (r:1 w:1)
// Storage: UniversalDividend CurrentUdIndex (r:1 w:1)
fn on_initialize_ud_reevalued() -> Weight {
(1_500_000_000 as Weight)
.saturating_add(T::DbWeight::get().reads(7 as Weight))
.saturating_add(T::DbWeight::get().writes(5 as Weight))
}
// Storage: UniversalDividend CurrentUd (r:1 w:0)
// Storage: System Account (r:1 w:1)
// Storage: Account PendingNewAccounts (r:0 w:1)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment