Skip to content

Commit

Permalink
Control pallet major changes (#89)
Browse files Browse the repository at this point in the history
  • Loading branch information
vovacha committed Sep 13, 2022
1 parent 6528d21 commit a7b3763
Show file tree
Hide file tree
Showing 22 changed files with 883 additions and 1,124 deletions.
2 changes: 1 addition & 1 deletion control/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ sp-storage = { default-features = false, git = "https://github.com/paritytech/su
frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.25" }
frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.25" }
frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.25", default-features = false, optional = true }
sp-io = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.25", default-features=false }

pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.25" }

Expand All @@ -39,7 +40,6 @@ gamedao-traits = { package = "gamedao-traits", path = "../traits", default-featu
[dev-dependencies]
sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.25" }
sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.25" }
sp-io = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.25" }
frame-support-test = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.25" }
pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.25" }
orml-tokens = { path = "../../orml/tokens", default-features = false }
Expand Down
2 changes: 1 addition & 1 deletion control/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Control is designed to make the following possible:

### Public Functions

* `org_controller_account` - Get controller of the organization with `org_id`.
* `org_prime_account` - Get prime of the organization with `org_id`.
* `org_treasury_account` - Get treasury of the organization with `org_id`.
* `is_org_active` - Find out if organization with `org_id` is active or not.
* `is_org_member_active` - Find out if organization with `org_id` has an active member with `account_id`.
Expand Down
98 changes: 55 additions & 43 deletions control/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,52 +32,62 @@ benchmarks! {
create_org {
let caller: T::AccountId = whitelisted_caller();
fund_account::<T>(&caller)?;
let org_nonce = Nonce::<T>::get();
let text = BoundedVec::truncate_from((0..255).collect());
let count = OrgCount::<T>::get();
}: _(
RawOrigin::Signed(caller.clone()),
caller.clone().into(),
BoundedVec::truncate_from((0..255).collect()),
BoundedVec::truncate_from((0..255).collect()),
OrgType::Individual,
AccessModel::Open,
FeeModel::NoFees,
T::Balance::default(),
T::ProtocolTokenId::get(),
T::PaymentTokenId::get(),
100,
None
RawOrigin::Signed(caller), text.clone(), text.clone(),
OrgType::Individual, AccessModel::Open, FeeModel::NoFees,
None, None, None, None, None
)
verify {
assert!(OrgByNonce::<T>::get(org_nonce).is_some());
assert!(OrgCount::<T>::get() == count + 1);
}

disable_org {
update_org {
let caller: T::AccountId = whitelisted_caller();
fund_account::<T>(&caller)?;

let org_id = <Pallet::<T> as ControlBenchmarkingTrait<T::AccountId, T::Hash>>::create_org(caller.clone()).unwrap();
let prime_id = Some(caller.clone());
let access_model = Some(AccessModel::Voting);
let member_limit = Some(100 as MemberLimit);
let fee_model = Some(FeeModel::NoFees);
let membership_fee: Option<T::Balance> = Some(99_u32.saturated_into());
}: _(
RawOrigin::Root,
org_id
RawOrigin::Signed(caller), org_id, prime_id, access_model.clone(),
member_limit, fee_model.clone(), membership_fee
)

verify {
let org = Orgs::<T>::get(org_id).unwrap();
assert_eq!(org.membership_fee, membership_fee);
}

disable_org {
let caller: T::AccountId = whitelisted_caller();
fund_account::<T>(&caller)?;
let org_id = <Pallet::<T> as ControlBenchmarkingTrait<T::AccountId, T::Hash>>::create_org(caller.clone()).unwrap();

}: _(RawOrigin::Root, org_id)

verify {
assert!(OrgState::<T>::get(org_id) == ControlState::Inactive);
assert!(OrgStates::<T>::get(org_id) == OrgState::Inactive);
}

enable_org {
let caller: T::AccountId = whitelisted_caller();
fund_account::<T>(&caller)?;
let org_id = <Pallet::<T> as ControlBenchmarkingTrait<T::AccountId, T::Hash>>::create_org(caller.clone()).unwrap();
Pallet::<T>::disable_org(RawOrigin::Root.into(), org_id)?;
}: _(
RawOrigin::Root,
org_id
)

}: _(RawOrigin::Root, org_id)

verify {
assert!(OrgState::<T>::get(org_id) == ControlState::Active);
assert!(OrgStates::<T>::get(org_id) == OrgState::Active);
}

add_member {
let r in 1 .. T::MaxMembersPerOrg::get()-1; // Limit members per org
let r in 1 .. T::MaxMembers::get();

// Prepare org creator and members
let creator: T::AccountId = whitelisted_caller();
Expand All @@ -93,17 +103,15 @@ benchmarks! {
// Create org and fill with members
let org_id = <Pallet::<T> as ControlBenchmarkingTrait<T::AccountId, T::Hash>>::create_org(creator.clone()).unwrap();
Pallet::<T>::fill_org_with_members(&org_id, accounts)?;
}: _(
RawOrigin::Signed(creator),
org_id,
member.clone()
)

}: _(RawOrigin::Signed(creator), org_id, member.clone())

verify {
assert!(OrgMembers::<T>::get(&org_id).contains(&member));
assert!(Members::<T>::get(&org_id).contains(&member));
}

remove_member {
let r in 1 .. T::MaxMembersPerOrg::get(); // Limit members per org
let r in 1 .. T::MaxMembers::get();

// Prepare org creator and members
let creator: T::AccountId = whitelisted_caller();
Expand All @@ -118,24 +126,28 @@ benchmarks! {

// Add members to org
Pallet::<T>::fill_org_with_members(&org_id, accounts.clone())?;
}: _(
RawOrigin::Signed(creator),
org_id,
accounts[0].clone()
)

}: _(RawOrigin::Signed(creator), org_id, accounts[0].clone())

verify {
assert!(!OrgMembers::<T>::get(&org_id).contains(&accounts[0]));
assert!(!Members::<T>::get(&org_id).contains(&accounts[0]));
}

check_membership {
spend_funds {
let caller: T::AccountId = whitelisted_caller();
let beneficiary: T::AccountId = account("beneficiary", 1, SEED);
fund_account::<T>(&caller)?;
let org_id = <Pallet::<T> as ControlBenchmarkingTrait<T::AccountId, T::Hash>>::create_org(caller.clone()).unwrap();
}: _(
RawOrigin::Signed(caller.clone()),
org_id,
caller.clone()
)
let treasury_id = OrgTreasury::<T>::get(&org_id).unwrap();
let currency_id = T::PaymentTokenId::get();
let amount: T::Balance = 300_000_000_000_00_u128.saturated_into();
fund_account::<T>(&treasury_id)?;

}: _(RawOrigin::Signed(caller), org_id, currency_id, beneficiary.clone(), amount)

verify {
assert!(T::Currency::free_balance(currency_id, &beneficiary) == amount);
}

impl_benchmark_test_suite!(Control, crate::mock::new_test_ext(), crate::mock::Test);
}
Loading

0 comments on commit a7b3763

Please sign in to comment.