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 5 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
944c129
Features needed for reserve-backed stablecoins
gavofyork Sep 20, 2020
911795a
Builds & tests.
gavofyork Sep 20, 2020
ddf83eb
Double map for an efficient destroy.
gavofyork Sep 20, 2020
9c79b6d
Update frame/assets/src/lib.rs
gavofyork Sep 21, 2020
b8ef2fb
ED/zombie-count/refs
gavofyork Sep 21, 2020
1888155
Merge remote-tracking branch 'origin/gav-assets-extra' into gav-asset…
gavofyork Sep 21, 2020
8bae97f
Merge remote-tracking branch 'origin/master' into gav-assets-extra
gavofyork Sep 25, 2020
4df1054
Update frame/assets/src/lib.rs
gavofyork Sep 25, 2020
aef1d0c
Update frame/assets/Cargo.toml
gavofyork Sep 25, 2020
e302a0e
Merge remote-tracking branch 'origin/master' into gav-assets-extra
gavofyork Oct 1, 2020
b173c37
Docs
gavofyork Oct 2, 2020
6263beb
Merge remote-tracking branch 'origin/master' into gav-assets-extra
gavofyork Oct 2, 2020
fd75591
Some tests
gavofyork Oct 5, 2020
3d03358
More tests
gavofyork Oct 5, 2020
8aa7cc5
Allow for max_zombies to be adjusted
gavofyork Oct 5, 2020
347f2db
Test for set_max_zombies
gavofyork Oct 5, 2020
2d5f752
Tests and a couple of fixes
gavofyork Oct 5, 2020
760ba44
First few benchmarks
gavofyork Oct 8, 2020
b630906
Benchmarks.
gavofyork Oct 8, 2020
39a54ea
Merge remote-tracking branch 'origin/master' into gav-assets-extra
Oct 15, 2020
4d173bc
Merge branch 'gav-assets-extra' of github.com:paritytech/substrate in…
gavofyork Oct 15, 2020
4664812
Fix error message in test
gavofyork Oct 15, 2020
8954764
Fixes
gavofyork Oct 15, 2020
87f311e
Fixes
gavofyork Oct 15, 2020
d12fe90
Fixes
gavofyork Oct 15, 2020
e29b3fa
cargo run --release --features runtime-benchmarks --manifest-path bin…
Oct 15, 2020
85443d2
Update frame/assets/src/lib.rs
gavofyork Oct 16, 2020
b53c1ba
Fixes
gavofyork Oct 16, 2020
6de272f
Merge branch 'gav-assets-extra' of github.com:paritytech/substrate in…
gavofyork Oct 16, 2020
27353a7
Fixes
gavofyork Oct 16, 2020
bbdce2e
Merge remote-tracking branch 'origin/master' into gav-assets-extra
Oct 16, 2020
0b5fa74
Fixes
gavofyork Oct 16, 2020
89cbf7e
Merge branch 'gav-assets-extra' of gthub.com:paritytech/substrate int…
gavofyork Oct 16, 2020
1eff995
cargo run --release --features runtime-benchmarks --manifest-path bin…
Oct 16, 2020
1fe69b1
Fixes
gavofyork Oct 16, 2020
76f2e40
Merge branch 'gav-assets-extra' of github.com:paritytech/substrate in…
gavofyork Oct 16, 2020
a452393
Update default weight
shawntabrizi Oct 17, 2020
402835d
Merge branch 'master' into gav-assets-extra
shawntabrizi Oct 17, 2020
373f4d7
Add proper verification to benchmarks
shawntabrizi Oct 18, 2020
d8b840a
minor improvements to tests
shawntabrizi Oct 18, 2020
13a0cc0
Merge branch 'gav-assets-extra' of github.com:paritytech/substrate in…
gavofyork Nov 9, 2020
e65a75c
Merge remote-tracking branch 'origin/master' into gav-assets-extra
gavofyork Nov 9, 2020
dc0839d
Update frame/assets/src/benchmarking.rs
gavofyork Nov 9, 2020
d0f1829
Fix
gavofyork Nov 9, 2020
45f3c04
Merge branch 'gav-assets-extra' of github.com:paritytech/substrate in…
gavofyork Nov 9, 2020
0286497
Merge remote-tracking branch 'origin/master' into gav-assets-extra
gavofyork Dec 2, 2020
927bcc6
New weights system
gavofyork Dec 2, 2020
a1c43f9
fix compile
shawntabrizi Dec 3, 2020
82bbd66
cargo run --release --features=runtime-benchmarks --manifest-path=bin…
Dec 3, 2020
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
82 changes: 50 additions & 32 deletions frame/assets/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,24 +65,32 @@ fn add_zombies<T: Trait>(minter: T::AccountId, n: u32) {
}
}

fn assert_last_event<T: Trait>(generic_event: <T as Trait>::Event) {
let events = frame_system::Module::<T>::events();
let system_event: <T as frame_system::Trait>::Event = generic_event.into();
// compare to the last event record
let frame_system::EventRecord { event, .. } = &events[events.len() - 1];
assert_eq!(event, &system_event);
}

benchmarks! {
_ { }

create {
let caller: T::AccountId = whitelisted_caller();
let caller_lookup = T::Lookup::unlookup(caller.clone());
T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());
}: _(SystemOrigin::Signed(caller), Default::default(), caller_lookup, 1, 1.into())
}: _(SystemOrigin::Signed(caller.clone()), Default::default(), caller_lookup, 1, 1.into())
verify {
assert!(true)
assert_last_event::<T>(RawEvent::Created(Default::default(), caller.clone(), caller).into());
}

force_create {
let caller: T::AccountId = whitelisted_caller();
let caller_lookup = T::Lookup::unlookup(caller);
let caller_lookup = T::Lookup::unlookup(caller.clone());
}: _(SystemOrigin::Root, Default::default(), caller_lookup, 1, 1.into())
verify {
assert!(true)
assert_last_event::<T>(RawEvent::ForceCreated(Default::default(), caller).into());
}

destroy {
Expand All @@ -91,7 +99,7 @@ benchmarks! {
add_zombies::<T>(caller.clone(), z);
}: _(SystemOrigin::Signed(caller), Default::default(), 10_000)
verify {
assert!(true)
assert_last_event::<T>(RawEvent::Destroyed(Default::default()).into());
}

force_destroy {
Expand All @@ -100,46 +108,50 @@ benchmarks! {
add_zombies::<T>(caller.clone(), z);
}: _(SystemOrigin::Root, Default::default(), 10_000)
verify {
assert!(true)
assert_last_event::<T>(RawEvent::Destroyed(Default::default()).into());
}

mint {
let (caller, caller_lookup) = create_default_asset::<T>(10);
}: _(SystemOrigin::Signed(caller), Default::default(), caller_lookup, 100.into())
let amount = T::Balance::from(100);
}: _(SystemOrigin::Signed(caller.clone()), Default::default(), caller_lookup, amount)
verify {
assert!(true)
assert_last_event::<T>(RawEvent::Issued(Default::default(), caller, amount).into());
}

burn {
let (caller, caller_lookup) = create_default_minted_asset::<T>(10, 100.into());
}: _(SystemOrigin::Signed(caller), Default::default(), caller_lookup, 100.into())
let amount = T::Balance::from(100);
let (caller, caller_lookup) = create_default_minted_asset::<T>(10, amount);
}: _(SystemOrigin::Signed(caller.clone()), Default::default(), caller_lookup, amount)
verify {
assert!(true)
assert_last_event::<T>(RawEvent::Burned(Default::default(), caller, amount).into());
}

transfer {
let (caller, caller_lookup) = create_default_minted_asset::<T>(10, 100.into());
let target = account("target", 0, SEED);
let target_lookup = T::Lookup::unlookup(target);
}: _(SystemOrigin::Signed(caller), Default::default(), target_lookup, 100.into())
let amount = T::Balance::from(100);
let (caller, caller_lookup) = create_default_minted_asset::<T>(10, amount);
let target: T::AccountId = account("target", 0, SEED);
let target_lookup = T::Lookup::unlookup(target.clone());
}: _(SystemOrigin::Signed(caller.clone()), Default::default(), target_lookup, amount)
verify {
assert!(true)
assert_last_event::<T>(RawEvent::Transferred(Default::default(), caller, target, amount).into());
}

force_transfer {
let (caller, caller_lookup) = create_default_minted_asset::<T>(10, 100.into());
let target = account("target", 0, SEED);
let target_lookup = T::Lookup::unlookup(target);
}: _(SystemOrigin::Signed(caller), Default::default(), caller_lookup, target_lookup, 100.into())
let amount = T::Balance::from(100);
let (caller, caller_lookup) = create_default_minted_asset::<T>(10, amount);
let target: T::AccountId = account("target", 0, SEED);
let target_lookup = T::Lookup::unlookup(target.clone());
}: _(SystemOrigin::Signed(caller.clone()), Default::default(), caller_lookup, target_lookup, amount)
verify {
assert!(true)
assert_last_event::<T>(RawEvent::ForceTransferred(Default::default(), caller, target, amount).into());
}

freeze {
let (caller, caller_lookup) = create_default_minted_asset::<T>(10, 100.into());
}: _(SystemOrigin::Signed(caller), Default::default(), caller_lookup)
}: _(SystemOrigin::Signed(caller.clone()), Default::default(), caller_lookup)
verify {
assert!(true)
assert_last_event::<T>(RawEvent::Frozen(Default::default(), caller).into());
}

thaw {
Expand All @@ -149,36 +161,42 @@ benchmarks! {
Default::default(),
caller_lookup.clone()
).is_ok());
}: _(SystemOrigin::Signed(caller), Default::default(), caller_lookup)
}: _(SystemOrigin::Signed(caller.clone()), Default::default(), caller_lookup)
verify {
assert!(true)
assert_last_event::<T>(RawEvent::Thawed(Default::default(), caller).into());
}

transfer_ownership {
let (caller, _) = create_default_asset::<T>(10);
let target = account("target", 0, SEED);
let target_lookup = T::Lookup::unlookup(target);
let target: T::AccountId = account("target", 0, SEED);
let target_lookup = T::Lookup::unlookup(target.clone());
}: _(SystemOrigin::Signed(caller), Default::default(), target_lookup)
verify {
assert!(true)
assert_last_event::<T>(RawEvent::OwnerChanged(Default::default(), target).into());
}

set_team {
let (caller, _) = create_default_asset::<T>(10);
let target0 = T::Lookup::unlookup(account("target", 0, SEED));
let target1 = T::Lookup::unlookup(account("target", 1, SEED));
let target2 = T::Lookup::unlookup(account("target", 2, SEED));
}: _(SystemOrigin::Signed(caller), Default::default(), target0, target1, target2)
}: _(SystemOrigin::Signed(caller), Default::default(), target0.clone(), target1.clone(), target2.clone())
verify {
assert!(true)
assert_last_event::<T>(RawEvent::TeamChanged(
Default::default(),
account("target", 0, SEED),
account("target", 1, SEED),
account("target", 2, SEED),
).into());
}

set_max_zombies {
let (caller, _) = create_default_asset::<T>(10);
let max_zombies: u32 = 100;
T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());
}: _(SystemOrigin::Signed(caller), Default::default(), 100)
}: _(SystemOrigin::Signed(caller), Default::default(), max_zombies)
verify {
assert!(true)
assert_last_event::<T>(RawEvent::MaxZombiesChanged(Default::default(), max_zombies).into());
}
}

Expand Down
89 changes: 74 additions & 15 deletions frame/assets/src/default_weight.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// This file is part of Substrate.

// Copyright (C) 2020 Parity Technologies (UK) Ltd.
// SPDX-License-Identifier: Apache-2.0

Expand All @@ -13,26 +15,83 @@
// See the License for the specific language governing permissions and
// limitations under the License.

//! Default weights for the Collective Pallet
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0-rc6
//! Weights for pallet_assets
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0
//! DATE: 2020-10-16, STEPS: [50], REPEAT: 20, LOW RANGE: [], HIGH RANGE: []

#![allow(unused_parens)]
#![allow(unused_imports)]

use frame_support::weights::{Weight, constants::RocksDbWeight as DbWeight};

impl crate::WeightInfo for () {
fn create() -> Weight { 0 as Weight }
fn force_create() -> Weight { 0 as Weight }
fn destroy(_z: u32, ) -> Weight { 0 as Weight }
fn force_destroy(_z: u32, ) -> Weight { 0 as Weight }
fn mint() -> Weight { 0 as Weight }
fn burn() -> Weight { 0 as Weight }
fn transfer() -> Weight { 0 as Weight }
fn force_transfer() -> Weight { 0 as Weight }
fn freeze() -> Weight { 0 as Weight }
fn thaw() -> Weight { 0 as Weight }
fn transfer_ownership() -> Weight { 0 as Weight }
fn set_team() -> Weight { 0 as Weight }
fn set_max_zombies() -> Weight { 0 as Weight }
fn create() -> Weight {
(58_069_000 as Weight)
.saturating_add(DbWeight::get().reads(1 as Weight))
.saturating_add(DbWeight::get().writes(1 as Weight))
}
fn force_create() -> Weight {
(30_401_000 as Weight)
.saturating_add(DbWeight::get().reads(1 as Weight))
.saturating_add(DbWeight::get().writes(1 as Weight))
}
fn destroy(z: u32, ) -> Weight {
(0 as Weight)
.saturating_add((1_151_000 as Weight).saturating_mul(z as Weight))
.saturating_add(DbWeight::get().reads(1 as Weight))
.saturating_add(DbWeight::get().writes(1 as Weight))
.saturating_add(DbWeight::get().writes((1 as Weight).saturating_mul(z as Weight)))
}
fn force_destroy(z: u32, ) -> Weight {
(0 as Weight)
.saturating_add((1_151_000 as Weight).saturating_mul(z as Weight))
.saturating_add(DbWeight::get().reads(1 as Weight))
.saturating_add(DbWeight::get().writes(1 as Weight))
.saturating_add(DbWeight::get().writes((1 as Weight).saturating_mul(z as Weight)))
}
fn mint() -> Weight {
(44_772_000 as Weight)
.saturating_add(DbWeight::get().reads(2 as Weight))
.saturating_add(DbWeight::get().writes(2 as Weight))
}
fn burn() -> Weight {
(39_564_000 as Weight)
.saturating_add(DbWeight::get().reads(2 as Weight))
.saturating_add(DbWeight::get().writes(2 as Weight))
}
fn transfer() -> Weight {
(58_453_000 as Weight)
.saturating_add(DbWeight::get().reads(4 as Weight))
.saturating_add(DbWeight::get().writes(3 as Weight))
}
fn force_transfer() -> Weight {
(58_704_000 as Weight)
.saturating_add(DbWeight::get().reads(4 as Weight))
.saturating_add(DbWeight::get().writes(3 as Weight))
}
fn freeze() -> Weight {
(43_141_000 as Weight)
.saturating_add(DbWeight::get().reads(2 as Weight))
.saturating_add(DbWeight::get().writes(1 as Weight))
}
fn thaw() -> Weight {
(42_965_000 as Weight)
.saturating_add(DbWeight::get().reads(2 as Weight))
.saturating_add(DbWeight::get().writes(1 as Weight))
}
fn transfer_ownership() -> Weight {
(30_110_000 as Weight)
.saturating_add(DbWeight::get().reads(1 as Weight))
.saturating_add(DbWeight::get().writes(1 as Weight))
}
fn set_team() -> Weight {
(30_704_000 as Weight)
.saturating_add(DbWeight::get().reads(1 as Weight))
.saturating_add(DbWeight::get().writes(1 as Weight))
}
fn set_max_zombies() -> Weight {
(56_445_000 as Weight)
.saturating_add(DbWeight::get().reads(1 as Weight))
.saturating_add(DbWeight::get().writes(1 as Weight))
}
}
33 changes: 27 additions & 6 deletions frame/assets/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -276,8 +276,8 @@ decl_error! {
pub trait WeightInfo {
fn create() -> Weight;
fn force_create() -> Weight;
fn destroy(_z: u32, ) -> Weight;
fn force_destroy(_z: u32, ) -> Weight;
fn destroy(z: u32, ) -> Weight;
fn force_destroy(z: u32, ) -> Weight;
fn mint() -> Weight;
fn burn() -> Weight;
fn transfer() -> Weight;
Expand Down Expand Up @@ -913,10 +913,25 @@ impl<T: Trait> Module<T> {
mod tests {
use super::*;

use frame_support::{impl_outer_origin, assert_ok, assert_noop, parameter_types, weights::Weight};
use frame_support::{
impl_outer_origin, impl_outer_event, assert_ok, assert_noop, parameter_types,
weights::Weight
};
use sp_core::H256;
use sp_runtime::{Perbill, traits::{BlakeTwo256, IdentityLookup}, testing::Header};

mod pallet_assets {
pub use crate::Event;
}

impl_outer_event! {
pub enum Event for Test {
frame_system<T>,
pallet_balances<T>,
pallet_assets<T>,
}
}

impl_outer_origin! {
pub enum Origin for Test where system = frame_system {}
}
Expand All @@ -940,7 +955,7 @@ mod tests {
type AccountId = u64;
type Lookup = IdentityLookup<Self::AccountId>;
type Header = Header;
type Event = ();
type Event = Event;
type BlockHashCount = BlockHashCount;
type MaximumBlockWeight = MaximumBlockWeight;
type DbWeight = ();
Expand All @@ -965,7 +980,7 @@ mod tests {
type MaxLocks = ();
type Balance = u64;
type DustRemoval = ();
type Event = ();
type Event = Event;
type ExistentialDeposit = ExistentialDeposit;
type AccountStore = System;
type WeightInfo = ();
Expand All @@ -978,7 +993,7 @@ mod tests {

impl Trait for Test {
type Currency = Balances;
type Event = ();
type Event = Event;
type Balance = u64;
type AssetId = u32;
type ForceOrigin = frame_system::EnsureRoot<u64>;
Expand Down Expand Up @@ -1114,6 +1129,7 @@ mod tests {
new_test_ext().execute_with(|| {
assert_ok!(Assets::force_create(Origin::root(), 0, 1, 10, 10));
assert_ok!(Assets::mint(Origin::signed(1), 0, 1, 100));
assert_eq!(Asset::<Test>::get(0).unwrap().accounts, 1);

// Cannot create a new account with a balance that is below minimum...
assert_noop!(Assets::mint(Origin::signed(1), 0, 2, 9), Error::<Test>::BalanceLow);
Expand All @@ -1125,13 +1141,16 @@ mod tests {
assert_ok!(Assets::transfer(Origin::signed(1), 0, 2, 91));
assert!(Assets::balance(0, 1).is_zero());
assert_eq!(Assets::balance(0, 2), 100);
assert_eq!(Asset::<Test>::get(0).unwrap().accounts, 1);

assert_ok!(Assets::force_transfer(Origin::signed(1), 0, 2, 1, 91));
assert!(Assets::balance(0, 2).is_zero());
assert_eq!(Assets::balance(0, 1), 100);
assert_eq!(Asset::<Test>::get(0).unwrap().accounts, 1);

assert_ok!(Assets::burn(Origin::signed(1), 0, 1, 91));
assert!(Assets::balance(0, 1).is_zero());
assert_eq!(Asset::<Test>::get(0).unwrap().accounts, 0);
});
}

Expand Down Expand Up @@ -1256,6 +1275,7 @@ mod tests {
assert_ok!(Assets::burn(Origin::signed(1), 0, 1, u64::max_value()));
assert_eq!(Assets::balance(0, 1), 0);
assert_noop!(Assets::transfer(Origin::signed(1), 0, 1, 50), Error::<Test>::BalanceLow);
assert_noop!(Assets::transfer(Origin::signed(2), 0, 1, 51), Error::<Test>::BalanceLow);
});
}

Expand Down Expand Up @@ -1286,6 +1306,7 @@ mod tests {
assert_ok!(Assets::mint(Origin::signed(1), 0, 1, 100));
assert_eq!(Assets::balance(0, 1), 100);
assert_ok!(Assets::burn(Origin::signed(1), 0, 1, u64::max_value()));
assert_eq!(Assets::balance(0, 1), 0);
});
}

Expand Down