Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions frame/bounties/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ const SEED: u32 = 0;
// Create bounties that are approved for use in `on_initialize`.
fn create_approved_bounties<T: Config>(n: u32) -> Result<(), &'static str> {
for i in 0..n {
let (caller, _curator, _fee, value, reason) = setup_bounty::<T>(i, MAX_BYTES);
let (caller, _curator, _fee, value, reason) =
setup_bounty::<T>(i, T::MaximumReasonLength::get());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe we should add in the doc of MaximumReasonLength that this value is used in benchmark, so changing it requires running the benchmark again.
(so it can't be changed without runtime upgrade).

Bounties::<T>::propose_bounty(RawOrigin::Signed(caller).into(), value, reason)?;
let bounty_id = BountyCount::<T>::get() - 1;
Bounties::<T>::approve_bounty(RawOrigin::Root.into(), bounty_id)?;
Expand All @@ -50,7 +51,8 @@ fn setup_bounty<T: Config>(
let caller = account("caller", u, SEED);
let value: BalanceOf<T> = T::BountyValueMinimum::get().saturating_mul(100u32.into());
let fee = value / 2u32.into();
let deposit = T::BountyDepositBase::get() + T::DataDepositPerByte::get() * MAX_BYTES.into();
let deposit = T::BountyDepositBase::get() +
T::DataDepositPerByte::get() * T::MaximumReasonLength::get().into();
let _ = T::Currency::make_free_balance_be(&caller, deposit);
let curator = account("curator", u, SEED);
let _ = T::Currency::make_free_balance_be(&curator, fee / 2u32.into());
Expand All @@ -60,7 +62,7 @@ fn setup_bounty<T: Config>(

fn create_bounty<T: Config>(
) -> Result<(<T::Lookup as StaticLookup>::Source, BountyIndex), &'static str> {
let (caller, curator, fee, value, reason) = setup_bounty::<T>(0, MAX_BYTES);
let (caller, curator, fee, value, reason) = setup_bounty::<T>(0, T::MaximumReasonLength::get());
let curator_lookup = T::Lookup::unlookup(curator.clone());
Bounties::<T>::propose_bounty(RawOrigin::Signed(caller).into(), value, reason)?;
let bounty_id = BountyCount::<T>::get() - 1;
Expand All @@ -81,24 +83,22 @@ fn assert_last_event<T: Config>(generic_event: <T as Config>::Event) {
frame_system::Pallet::<T>::assert_last_event(generic_event.into());
}

const MAX_BYTES: u32 = 16384;

benchmarks! {
propose_bounty {
let d in 0 .. MAX_BYTES;
let d in 0 .. T::MaximumReasonLength::get();

let (caller, curator, fee, value, description) = setup_bounty::<T>(0, d);
}: _(RawOrigin::Signed(caller), value, description)

approve_bounty {
let (caller, curator, fee, value, reason) = setup_bounty::<T>(0, MAX_BYTES);
let (caller, curator, fee, value, reason) = setup_bounty::<T>(0, T::MaximumReasonLength::get());
Bounties::<T>::propose_bounty(RawOrigin::Signed(caller).into(), value, reason)?;
let bounty_id = BountyCount::<T>::get() - 1;
}: _(RawOrigin::Root, bounty_id)

propose_curator {
setup_pot_account::<T>();
let (caller, curator, fee, value, reason) = setup_bounty::<T>(0, MAX_BYTES);
let (caller, curator, fee, value, reason) = setup_bounty::<T>(0, T::MaximumReasonLength::get());
let curator_lookup = T::Lookup::unlookup(curator.clone());
Bounties::<T>::propose_bounty(RawOrigin::Signed(caller).into(), value, reason)?;
let bounty_id = BountyCount::<T>::get() - 1;
Expand All @@ -118,7 +118,7 @@ benchmarks! {

accept_curator {
setup_pot_account::<T>();
let (caller, curator, fee, value, reason) = setup_bounty::<T>(0, MAX_BYTES);
let (caller, curator, fee, value, reason) = setup_bounty::<T>(0, T::MaximumReasonLength::get());
let curator_lookup = T::Lookup::unlookup(curator.clone());
Bounties::<T>::propose_bounty(RawOrigin::Signed(caller).into(), value, reason)?;
let bounty_id = BountyCount::<T>::get() - 1;
Expand Down
2 changes: 2 additions & 0 deletions frame/bounties/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,8 @@ pub mod pallet {
type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;

/// Maximum acceptable reason length.
///
/// Benchmarks depend on this value, be sure to update weights file when changing this value
#[pallet::constant]
type MaximumReasonLength: Get<u32>;

Expand Down
17 changes: 7 additions & 10 deletions frame/tips/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,20 +84,17 @@ fn setup_pot_account<T: Config>() {
let _ = T::Currency::make_free_balance_be(&pot_account, value);
}

const MAX_BYTES: u32 = 16384;
const MAX_TIPPERS: u32 = 100;

benchmarks! {
report_awesome {
let r in 0 .. MAX_BYTES;
let r in 0 .. T::MaximumReasonLength::get();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

similarly I think we should say something in the doc

let (caller, reason, awesome_person) = setup_awesome::<T>(r);
// Whitelist caller account from further DB operations.
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
}: _(RawOrigin::Signed(caller), reason, awesome_person)

retract_tip {
let r = MAX_BYTES;
let r = T::MaximumReasonLength::get();
let (caller, reason, awesome_person) = setup_awesome::<T>(r);
TipsMod::<T>::report_awesome(
RawOrigin::Signed(caller.clone()).into(),
Expand All @@ -112,8 +109,8 @@ benchmarks! {
}: _(RawOrigin::Signed(caller), hash)

tip_new {
let r in 0 .. MAX_BYTES;
let t in 1 .. MAX_TIPPERS;
let r in 0 .. T::MaximumReasonLength::get();
let t in 1 .. T::Tippers::max_len() as u32;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe it also worth mentionning it that ContainsLengthBound::max_len implementation of Tippers is used in benchmark.


let (caller, reason, beneficiary, value) = setup_tip::<T>(r, t)?;
// Whitelist caller account from further DB operations.
Expand All @@ -122,7 +119,7 @@ benchmarks! {
}: _(RawOrigin::Signed(caller), reason, beneficiary, value)

tip {
let t in 1 .. MAX_TIPPERS;
let t in 1 .. T::Tippers::max_len() as u32;
let (member, reason, beneficiary, value) = setup_tip::<T>(0, t)?;
let value = T::Currency::minimum_balance().saturating_mul(100u32.into());
TipsMod::<T>::tip_new(
Expand All @@ -142,7 +139,7 @@ benchmarks! {
}: _(RawOrigin::Signed(caller), hash, value)

close_tip {
let t in 1 .. MAX_TIPPERS;
let t in 1 .. T::Tippers::max_len() as u32;

// Make sure pot is funded
setup_pot_account::<T>();
Expand Down Expand Up @@ -171,7 +168,7 @@ benchmarks! {
}: _(RawOrigin::Signed(caller), hash)

slash_tip {
let t in 1 .. MAX_TIPPERS;
let t in 1 .. T::Tippers::max_len() as u32;

// Make sure pot is funded
setup_pot_account::<T>();
Expand Down
5 changes: 4 additions & 1 deletion frame/tips/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,8 @@ pub mod pallet {
type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;

/// Maximum acceptable reason length.
///
/// Benchmarks depend on this value, be sure to update weights file when changing this value
#[pallet::constant]
type MaximumReasonLength: Get<u32>;

Expand All @@ -150,7 +152,8 @@ pub mod pallet {
/// Origin from which tippers must come.
///
/// `ContainsLengthBound::max_len` must be cost free (i.e. no storage read or heavy
/// operation).
/// operation). Benchmarks depend on the value of `ContainsLengthBound::max_len` be sure to
/// update weights file when altering this method.
type Tippers: SortedMembers<Self::AccountId> + ContainsLengthBound;

/// Weight information for extrinsics in this pallet.
Expand Down