Skip to content
Open
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
69 changes: 66 additions & 3 deletions pallets/asset/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ pub(crate) fn create_and_issue_sample_asset<T: AssetConfig>(asset_owner: &User<T
Pallet::<T>::issue(
asset_owner.origin().into(),
asset_id,
(1_000_000 * POLY).into(),
(ONE_UNIT * POLY).into(),
PortfolioKind::Default,
)
.unwrap();
Expand All @@ -145,6 +145,7 @@ pub fn setup_asset_transfer<T: AssetConfig>(
pause_compliance: bool,
pause_restrictions: bool,
n_mediators: u8,
move_to_sender_portfolio: bool,
) -> (PortfolioId, PortfolioId, Vec<User<T>>, AssetId) {
let sender_portfolio =
create_portfolio::<T>(sender, sender_portfolio_name.unwrap_or("SenderPortfolio"));
Expand All @@ -153,7 +154,10 @@ pub fn setup_asset_transfer<T: AssetConfig>(

// Creates the asset
let asset_id = create_and_issue_sample_asset::<T>(sender);
move_from_default_portfolio::<T>(sender, asset_id, ONE_UNIT * POLY, sender_portfolio);
if move_to_sender_portfolio {
// Moves some asset to the sender portfolio
move_from_default_portfolio::<T>(sender, asset_id, ONE_UNIT * POLY, sender_portfolio);
}

// Sets mandatory mediators
let mut asset_mediators = Vec::new();
Expand Down Expand Up @@ -664,7 +668,7 @@ benchmarks! {
let mut weight_meter = WeightMeter::max_limit_no_minimum();

let (sender_portfolio, receiver_portfolio, _, asset_id) =
setup_asset_transfer::<T>(&alice, &bob, None, None, true, true, 0);
setup_asset_transfer::<T>(&alice, &bob, None, None, true, true, 0, true);
}: {
Pallet::<T>::base_transfer(
sender_portfolio,
Expand Down Expand Up @@ -777,4 +781,63 @@ benchmarks! {
.unwrap();
}: _(RawOrigin::Root, asset_metadata_name, asset_metadata_spec)

transfer_asset_base_weight {
let alice = UserBuilder::<T>::default().generate_did().build("Alice");
let bob = UserBuilder::<T>::default().generate_did().build("Bob");

// Setup the transfer with worse case conditions.
// Don't move the assets from the default portfolio.
let (_sender_portfolio, _receiver_portfolio, _, asset_id) =
setup_asset_transfer::<T>(&alice, &bob, None, None, true, true, 0, false);
}: {
Pallet::<T>::base_transfer_asset(
alice.origin.into(),
asset_id,
bob.account(),
ONE_UNIT,
None,
// Only benchmark the base cost.
true,
)
.unwrap();
}

receiver_affirm_asset_transfer_base_weight {
let alice = UserBuilder::<T>::default().generate_did().build("Alice");
let bob = UserBuilder::<T>::default().generate_did().build("Bob");

// Setup the transfer with worse case conditions.
// Don't move the assets from the default portfolio.
let (_sender_portfolio, _receiver_portfolio, _, asset_id) =
setup_asset_transfer::<T>(&alice, &bob, None, None, true, true, 0, false);

let mut weight_meter = WeightMeter::max_limit_no_minimum();
let details = T::SettlementFn::transfer_asset_and_try_execute(
alice.origin.into(),
bob.account(),
asset_id,
ONE_UNIT,
None,
&mut weight_meter,
false,
).expect("Transfer setup must work");
let instruction_id = details.instruction_id.expect("Pending transfer must have an ID");

// Store the pending transfer details.
let pending_details = PendingTransferDetails {
from: details.from.clone(),
asset_id,
amount: ONE_UNIT,
memo: None,
};
PendingTransfers::<T>::insert(&bob.account(), instruction_id, pending_details);
}: {
Pallet::<T>::base_receiver_affirm_asset_transfer(
bob.origin.into(),
instruction_id,
// Only benchmark the base cost.
true,
)
.expect("Receiver affirm must work");
}
}
Loading