Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Commit 8b82790

Browse files
pfcoderbkchr
authored andcommitted
add instantiable support for treasury pallet (#7058)
* add instantiable support for treasury pallet * update treasury pallet benchmarking code to support multi-instance * use benchmark_intance! macro; fix hard coded treasury identity string; fix over characters line width limitation error * fix line return style
1 parent 6c89d07 commit 8b82790

File tree

3 files changed

+141
-121
lines changed

3 files changed

+141
-121
lines changed

frame/treasury/src/benchmarking.rs

Lines changed: 42 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -22,29 +22,29 @@
2222
use super::*;
2323

2424
use frame_system::RawOrigin;
25-
use frame_benchmarking::{benchmarks, account, whitelisted_caller};
25+
use frame_benchmarking::{benchmarks_instance, account, whitelisted_caller};
2626
use frame_support::traits::OnInitialize;
2727

2828
use crate::Module as Treasury;
2929

3030
const SEED: u32 = 0;
3131

3232
// Create the pre-requisite information needed to create a treasury `propose_spend`.
33-
fn setup_proposal<T: Trait>(u: u32) -> (
33+
fn setup_proposal<T: Trait<I>, I: Instance>(u: u32) -> (
3434
T::AccountId,
35-
BalanceOf<T>,
35+
BalanceOf<T, I>,
3636
<T::Lookup as StaticLookup>::Source,
3737
) {
3838
let caller = account("caller", u, SEED);
39-
let value: BalanceOf<T> = T::ProposalBondMinimum::get().saturating_mul(100.into());
39+
let value: BalanceOf<T, I> = T::ProposalBondMinimum::get().saturating_mul(100.into());
4040
let _ = T::Currency::make_free_balance_be(&caller, value);
4141
let beneficiary = account("beneficiary", u, SEED);
4242
let beneficiary_lookup = T::Lookup::unlookup(beneficiary);
4343
(caller, value, beneficiary_lookup)
4444
}
4545

4646
// Create the pre-requisite information needed to create a `report_awesome`.
47-
fn setup_awesome<T: Trait>(length: u32) -> (T::AccountId, Vec<u8>, T::AccountId) {
47+
fn setup_awesome<T: Trait<I>, I: Instance>(length: u32) -> (T::AccountId, Vec<u8>, T::AccountId) {
4848
let caller = whitelisted_caller();
4949
let value = T::TipReportDepositBase::get()
5050
+ T::TipReportDepositPerByte::get() * length.into()
@@ -56,8 +56,8 @@ fn setup_awesome<T: Trait>(length: u32) -> (T::AccountId, Vec<u8>, T::AccountId)
5656
}
5757

5858
// Create the pre-requisite information needed to call `tip_new`.
59-
fn setup_tip<T: Trait>(r: u32, t: u32) ->
60-
Result<(T::AccountId, Vec<u8>, T::AccountId, BalanceOf<T>), &'static str>
59+
fn setup_tip<T: Trait<I>, I: Instance>(r: u32, t: u32) ->
60+
Result<(T::AccountId, Vec<u8>, T::AccountId, BalanceOf<T, I>), &'static str>
6161
{
6262
let tippers_count = T::Tippers::count();
6363

@@ -77,13 +77,15 @@ fn setup_tip<T: Trait>(r: u32, t: u32) ->
7777

7878
// Create `t` new tips for the tip proposal with `hash`.
7979
// This function automatically makes the tip able to close.
80-
fn create_tips<T: Trait>(t: u32, hash: T::Hash, value: BalanceOf<T>) -> Result<(), &'static str> {
80+
fn create_tips<T: Trait<I>, I: Instance>(t: u32, hash: T::Hash, value: BalanceOf<T, I>) ->
81+
Result<(), &'static str>
82+
{
8183
for i in 0 .. t {
8284
let caller = account("member", i, SEED);
8385
ensure!(T::Tippers::contains(&caller), "caller is not a tipper");
84-
Treasury::<T>::tip(RawOrigin::Signed(caller).into(), hash, value)?;
86+
Treasury::<T, I>::tip(RawOrigin::Signed(caller).into(), hash, value)?;
8587
}
86-
Tips::<T>::mutate(hash, |maybe_tip| {
88+
Tips::<T, I>::mutate(hash, |maybe_tip| {
8789
if let Some(open_tip) = maybe_tip {
8890
open_tip.closes = Some(T::BlockNumber::zero());
8991
}
@@ -92,69 +94,69 @@ fn create_tips<T: Trait>(t: u32, hash: T::Hash, value: BalanceOf<T>) -> Result<(
9294
}
9395

9496
// Create proposals that are approved for use in `on_initialize`.
95-
fn create_approved_proposals<T: Trait>(n: u32) -> Result<(), &'static str> {
97+
fn create_approved_proposals<T: Trait<I>, I: Instance>(n: u32) -> Result<(), &'static str> {
9698
for i in 0 .. n {
97-
let (caller, value, lookup) = setup_proposal::<T>(i);
98-
Treasury::<T>::propose_spend(
99+
let (caller, value, lookup) = setup_proposal::<T, I>(i);
100+
Treasury::<T, I>::propose_spend(
99101
RawOrigin::Signed(caller).into(),
100102
value,
101103
lookup
102104
)?;
103-
let proposal_id = ProposalCount::get() - 1;
104-
Treasury::<T>::approve_proposal(RawOrigin::Root.into(), proposal_id)?;
105+
let proposal_id = <ProposalCount<I>>::get() - 1;
106+
Treasury::<T, I>::approve_proposal(RawOrigin::Root.into(), proposal_id)?;
105107
}
106-
ensure!(Approvals::get().len() == n as usize, "Not all approved");
108+
ensure!(<Approvals<I>>::get().len() == n as usize, "Not all approved");
107109
Ok(())
108110
}
109111

110112
const MAX_BYTES: u32 = 16384;
111113
const MAX_TIPPERS: u32 = 100;
112114

113-
benchmarks! {
115+
benchmarks_instance! {
114116
_ { }
115117

116118
propose_spend {
117119
let u in 0 .. 1000;
118-
let (caller, value, beneficiary_lookup) = setup_proposal::<T>(u);
120+
let (caller, value, beneficiary_lookup) = setup_proposal::<T, _>(u);
119121
// Whitelist caller account from further DB operations.
120122
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
121123
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
122124
}: _(RawOrigin::Signed(caller), value, beneficiary_lookup)
123125

124126
reject_proposal {
125127
let u in 0 .. 1000;
126-
let (caller, value, beneficiary_lookup) = setup_proposal::<T>(u);
127-
Treasury::<T>::propose_spend(
128+
let (caller, value, beneficiary_lookup) = setup_proposal::<T, _>(u);
129+
Treasury::<T, _>::propose_spend(
128130
RawOrigin::Signed(caller).into(),
129131
value,
130132
beneficiary_lookup
131133
)?;
132-
let proposal_id = ProposalCount::get() - 1;
134+
let proposal_id = Treasury::<T, _>::proposal_count() - 1;
133135
}: _(RawOrigin::Root, proposal_id)
134136

135137
approve_proposal {
136138
let u in 0 .. 1000;
137-
let (caller, value, beneficiary_lookup) = setup_proposal::<T>(u);
138-
Treasury::<T>::propose_spend(
139+
let (caller, value, beneficiary_lookup) = setup_proposal::<T, _>(u);
140+
Treasury::<T, _>::propose_spend(
139141
RawOrigin::Signed(caller).into(),
140142
value,
141143
beneficiary_lookup
142144
)?;
143-
let proposal_id = ProposalCount::get() - 1;
145+
let proposal_id = Treasury::<T, _>::proposal_count() - 1;
144146
}: _(RawOrigin::Root, proposal_id)
145147

146148
report_awesome {
147149
let r in 0 .. MAX_BYTES;
148-
let (caller, reason, awesome_person) = setup_awesome::<T>(r);
150+
let (caller, reason, awesome_person) = setup_awesome::<T, _>(r);
149151
// Whitelist caller account from further DB operations.
150152
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
151153
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
152154
}: _(RawOrigin::Signed(caller), reason, awesome_person)
153155

154156
retract_tip {
155157
let r in 0 .. MAX_BYTES;
156-
let (caller, reason, awesome_person) = setup_awesome::<T>(r);
157-
Treasury::<T>::report_awesome(
158+
let (caller, reason, awesome_person) = setup_awesome::<T, _>(r);
159+
Treasury::<T, _>::report_awesome(
158160
RawOrigin::Signed(caller.clone()).into(),
159161
reason.clone(),
160162
awesome_person.clone()
@@ -170,26 +172,26 @@ benchmarks! {
170172
let r in 0 .. MAX_BYTES;
171173
let t in 1 .. MAX_TIPPERS;
172174

173-
let (caller, reason, beneficiary, value) = setup_tip::<T>(r, t)?;
175+
let (caller, reason, beneficiary, value) = setup_tip::<T, _>(r, t)?;
174176
// Whitelist caller account from further DB operations.
175177
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
176178
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
177179
}: _(RawOrigin::Signed(caller), reason, beneficiary, value)
178180

179181
tip {
180182
let t in 1 .. MAX_TIPPERS;
181-
let (member, reason, beneficiary, value) = setup_tip::<T>(0, t)?;
183+
let (member, reason, beneficiary, value) = setup_tip::<T, _>(0, t)?;
182184
let value = T::Currency::minimum_balance().saturating_mul(100.into());
183-
Treasury::<T>::tip_new(
185+
Treasury::<T, _>::tip_new(
184186
RawOrigin::Signed(member).into(),
185187
reason.clone(),
186188
beneficiary.clone(),
187189
value
188190
)?;
189191
let reason_hash = T::Hashing::hash(&reason[..]);
190192
let hash = T::Hashing::hash_of(&(&reason_hash, &beneficiary));
191-
ensure!(Tips::<T>::contains_key(hash), "tip does not exist");
192-
create_tips::<T>(t - 1, hash.clone(), value)?;
193+
ensure!(Tips::<T, _>::contains_key(hash), "tip does not exist");
194+
create_tips::<T, _>(t - 1, hash.clone(), value)?;
193195
let caller = account("member", t - 1, SEED);
194196
// Whitelist caller account from further DB operations.
195197
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
@@ -200,14 +202,14 @@ benchmarks! {
200202
let t in 1 .. MAX_TIPPERS;
201203

202204
// Make sure pot is funded
203-
let pot_account = Treasury::<T>::account_id();
205+
let pot_account = Treasury::<T, _>::account_id();
204206
let value = T::Currency::minimum_balance().saturating_mul(1_000_000_000.into());
205207
let _ = T::Currency::make_free_balance_be(&pot_account, value);
206208

207209
// Set up a new tip proposal
208-
let (member, reason, beneficiary, value) = setup_tip::<T>(0, t)?;
210+
let (member, reason, beneficiary, value) = setup_tip::<T, _>(0, t)?;
209211
let value = T::Currency::minimum_balance().saturating_mul(100.into());
210-
Treasury::<T>::tip_new(
212+
Treasury::<T, _>::tip_new(
211213
RawOrigin::Signed(member).into(),
212214
reason.clone(),
213215
beneficiary.clone(),
@@ -217,8 +219,8 @@ benchmarks! {
217219
// Create a bunch of tips
218220
let reason_hash = T::Hashing::hash(&reason[..]);
219221
let hash = T::Hashing::hash_of(&(&reason_hash, &beneficiary));
220-
ensure!(Tips::<T>::contains_key(hash), "tip does not exist");
221-
create_tips::<T>(t, hash.clone(), value)?;
222+
ensure!(Tips::<T, _>::contains_key(hash), "tip does not exist");
223+
create_tips::<T, _>(t, hash.clone(), value)?;
222224

223225
let caller = account("caller", t, SEED);
224226
// Whitelist caller account from further DB operations.
@@ -228,12 +230,12 @@ benchmarks! {
228230

229231
on_initialize {
230232
let p in 0 .. 100;
231-
let pot_account = Treasury::<T>::account_id();
233+
let pot_account = Treasury::<T, _>::account_id();
232234
let value = T::Currency::minimum_balance().saturating_mul(1_000_000_000.into());
233235
let _ = T::Currency::make_free_balance_be(&pot_account, value);
234-
create_approved_proposals::<T>(p)?;
236+
create_approved_proposals::<T, _>(p)?;
235237
}: {
236-
Treasury::<T>::on_initialize(T::BlockNumber::zero());
238+
Treasury::<T, _>::on_initialize(T::BlockNumber::zero());
237239
}
238240
}
239241

0 commit comments

Comments
 (0)