Skip to content

Commit

Permalink
Assets Events for Deposited and Withdrawn (#4312)
Browse files Browse the repository at this point in the history
Closes #4308

Polkadot address: 12gMhxHw8QjEwLQvnqsmMVY1z5gFa54vND74aMUbhhwN6mJR

---------

Co-authored-by: command-bot <>
Co-authored-by: Francisco Aguirre <[email protected]>
  • Loading branch information
pandres95 and franciscoaguirre authored Apr 30, 2024
1 parent 4875ea1 commit 1fb058b
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 0 deletions.
19 changes: 19 additions & 0 deletions prdoc/pr_4312.prdoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
title: Add `Deposited`/`Withdrawn` events for `pallet-assets`

doc:
- audience: Runtime Dev
description: |
New events were added to `pallet-assets`: `Deposited` and `Withdrawn`. Make sure
to cover those events on tests if necessary.
- audience: Runtime User
description: |
New events were added to `pallet-assets`: `Deposited` and `Withdrawn`. These indicate
a change in the balance of an account.

crates:
- name: pallet-assets
bump: minor
- name: pallet-asset-tx-payment
bump: minor
- name: pallet-asset-conversion-tx-payment
bump: minor
16 changes: 16 additions & 0 deletions substrate/frame/assets/src/impl_fungibles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,22 @@ impl<T: Config<I>, I: 'static> fungibles::Balanced<<T as SystemConfig>::AccountI
{
type OnDropCredit = fungibles::DecreaseIssuance<T::AccountId, Self>;
type OnDropDebt = fungibles::IncreaseIssuance<T::AccountId, Self>;

fn done_deposit(
asset_id: Self::AssetId,
who: &<T as SystemConfig>::AccountId,
amount: Self::Balance,
) {
Self::deposit_event(Event::Deposited { asset_id, who: who.clone(), amount })
}

fn done_withdraw(
asset_id: Self::AssetId,
who: &<T as SystemConfig>::AccountId,
amount: Self::Balance,
) {
Self::deposit_event(Event::Withdrawn { asset_id, who: who.clone(), amount })
}
}

impl<T: Config<I>, I: 'static> fungibles::Unbalanced<T::AccountId> for Pallet<T, I> {
Expand Down
4 changes: 4 additions & 0 deletions substrate/frame/assets/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -571,6 +571,10 @@ pub mod pallet {
Touched { asset_id: T::AssetId, who: T::AccountId, depositor: T::AccountId },
/// Some account `who` was blocked.
Blocked { asset_id: T::AssetId, who: T::AccountId },
/// Some assets were deposited (e.g. for transaction fees).
Deposited { asset_id: T::AssetId, who: T::AccountId, amount: T::Balance },
/// Some assets were withdrawn from the account (e.g. for transaction fees).
Withdrawn { asset_id: T::AssetId, who: T::AccountId, amount: T::Balance },
}

#[pallet::error]
Expand Down
12 changes: 12 additions & 0 deletions substrate/frame/assets/src/tests/sets.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@ fn deposit_from_set_types_works() {
assert_eq!(First::<Assets>::balance((), &account2), 50);
assert_eq!(First::<Assets>::total_issuance(()), 100);

System::assert_has_event(RuntimeEvent::Assets(crate::Event::Deposited {
asset_id: asset1,
who: account2,
amount: 50,
}));

assert_eq!(imb.peek(), 50);

let (imb1, imb2) = imb.split(30);
Expand Down Expand Up @@ -336,6 +342,12 @@ fn withdraw_from_set_types_works() {
assert_eq!(First::<Assets>::balance((), &account2), 50);
assert_eq!(First::<Assets>::total_issuance(()), 200);

System::assert_has_event(RuntimeEvent::Assets(crate::Event::Withdrawn {
asset_id: asset1,
who: account2,
amount: 50,
}));

assert_eq!(imb.peek(), 50);
drop(imb);
assert_eq!(First::<Assets>::total_issuance(()), 150);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,8 @@ fn transaction_payment_in_asset_possible() {
.base_weight(Weight::from_parts(base_weight, 0))
.build()
.execute_with(|| {
System::set_block_number(1);

// create the asset
let asset_id = 1;
let min_balance = 2;
Expand Down Expand Up @@ -246,6 +248,12 @@ fn transaction_payment_in_asset_possible() {
// check that fee was charged in the given asset
assert_eq!(Assets::balance(asset_id, caller), balance - fee_in_asset);

System::assert_has_event(RuntimeEvent::Assets(pallet_assets::Event::Withdrawn {
asset_id,
who: caller,
amount: fee_in_asset,
}));

assert_ok!(ChargeAssetTxPayment::<Runtime>::post_dispatch(
Some(pre),
&info_from_weight(WEIGHT_5), // estimated tx weight
Expand Down Expand Up @@ -385,6 +393,8 @@ fn asset_transaction_payment_with_tip_and_refund() {
.base_weight(Weight::from_parts(base_weight, 0))
.build()
.execute_with(|| {
System::set_block_number(1);

// create the asset
let asset_id = 1;
let min_balance = 2;
Expand Down Expand Up @@ -434,6 +444,12 @@ fn asset_transaction_payment_with_tip_and_refund() {
)
.unwrap();

System::assert_has_event(RuntimeEvent::Assets(pallet_assets::Event::Withdrawn {
asset_id,
who: caller,
amount: fee_in_asset,
}));

assert_ok!(ChargeAssetTxPayment::<Runtime>::post_dispatch(
Some(pre),
&info_from_weight(WEIGHT_100),
Expand All @@ -451,6 +467,12 @@ fn asset_transaction_payment_with_tip_and_refund() {
balance - fee_in_asset + expected_token_refund
);
assert_eq!(Balances::free_balance(caller), 20 * balance_factor);

System::assert_has_event(RuntimeEvent::Assets(pallet_assets::Event::Deposited {
asset_id,
who: caller,
amount: expected_token_refund,
}));
});
}

Expand Down
28 changes: 28 additions & 0 deletions substrate/frame/transaction-payment/asset-tx-payment/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@ fn transaction_payment_in_asset_possible() {
.base_weight(Weight::from_parts(base_weight, 0))
.build()
.execute_with(|| {
System::set_block_number(1);

// create the asset
let asset_id = 1;
let min_balance = 2;
Expand Down Expand Up @@ -188,6 +190,12 @@ fn transaction_payment_in_asset_possible() {
assert_eq!(Assets::balance(asset_id, caller), balance - fee);
assert_eq!(Assets::balance(asset_id, BLOCK_AUTHOR), 0);

System::assert_has_event(RuntimeEvent::Assets(pallet_assets::Event::Withdrawn {
asset_id,
who: caller,
amount: fee,
}));

assert_ok!(ChargeAssetTxPayment::<Runtime>::post_dispatch(
Some(pre),
&info_from_weight(Weight::from_parts(weight, 0)),
Expand All @@ -198,6 +206,12 @@ fn transaction_payment_in_asset_possible() {
assert_eq!(Assets::balance(asset_id, caller), balance - fee);
// check that the block author gets rewarded
assert_eq!(Assets::balance(asset_id, BLOCK_AUTHOR), fee);

System::assert_has_event(RuntimeEvent::Assets(pallet_assets::Event::Deposited {
asset_id,
who: BLOCK_AUTHOR,
amount: fee,
}));
});
}

Expand Down Expand Up @@ -263,6 +277,8 @@ fn asset_transaction_payment_with_tip_and_refund() {
.base_weight(Weight::from_parts(base_weight, 0))
.build()
.execute_with(|| {
System::set_block_number(1);

// create the asset
let asset_id = 1;
let min_balance = 2;
Expand Down Expand Up @@ -292,6 +308,12 @@ fn asset_transaction_payment_with_tip_and_refund() {
.unwrap();
assert_eq!(Assets::balance(asset_id, caller), balance - fee_with_tip);

System::assert_has_event(RuntimeEvent::Assets(pallet_assets::Event::Withdrawn {
asset_id,
who: caller,
amount: fee_with_tip,
}));

let final_weight = 50;
assert_ok!(ChargeAssetTxPayment::<Runtime>::post_dispatch(
Some(pre),
Expand All @@ -304,6 +326,12 @@ fn asset_transaction_payment_with_tip_and_refund() {
fee_with_tip - (weight - final_weight) * min_balance / ExistentialDeposit::get();
assert_eq!(Assets::balance(asset_id, caller), balance - (final_fee));
assert_eq!(Assets::balance(asset_id, BLOCK_AUTHOR), final_fee);

System::assert_has_event(RuntimeEvent::Assets(pallet_assets::Event::Deposited {
asset_id,
who: caller,
amount: fee_with_tip - final_fee,
}));
});
}

Expand Down

0 comments on commit 1fb058b

Please sign in to comment.