Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Control pallet major changes #89

Merged
merged 3 commits into from
Aug 19, 2022
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
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