diff --git a/pallets/asset/src/lib.rs b/pallets/asset/src/lib.rs index 169e7795b0..f8829eb056 100644 --- a/pallets/asset/src/lib.rs +++ b/pallets/asset/src/lib.rs @@ -3740,8 +3740,15 @@ impl Pallet { } } + if let Err(e) = Self::ensure_holder_is_not_frozen(sender, asset_id) { + asset_transfer_errors.push(e); + } + if skip_locked_check { - if Self::get_holders_balance(sender, asset_id) < transfer_value { + let frozen_balance = Self::get_holders_frozen_balance(sender, asset_id); + let current_balance = Self::get_holders_balance(sender, asset_id); + + if current_balance.saturating_sub(frozen_balance) < transfer_value { asset_transfer_errors.push(Error::::InsufficientBalance.into()); } } else { diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index af9772aa18..2d3c3855d1 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1229,6 +1229,12 @@ impl Pallet { nft_transfer_errors.push(e); } + if let Err(e) = + pallet_asset::Pallet::::ensure_holder_is_not_frozen(sender, nfts.asset_id()) + { + nft_transfer_errors.push(e); + } + if skip_locked_check { for nft_id in nfts.ids() { if !Self::is_holder_of_nft(nfts.asset_id(), nft_id, sender) { @@ -1471,6 +1477,7 @@ impl Pallet { !Self::is_nft_locked(&asset_id, &nft_id, &asset_holder), Error::::NFTIsLocked ); + pallet_asset::Pallet::::ensure_holder_is_not_frozen(&asset_holder, &asset_id)?; match asset_holder { AssetHolder::Account(acc_id) => { diff --git a/pallets/runtime/tests/src/settlement_pallet/transfer_funds.rs b/pallets/runtime/tests/src/settlement_pallet/transfer_funds.rs index 3f7d8c3dfa..ba27fe85f2 100644 --- a/pallets/runtime/tests/src/settlement_pallet/transfer_funds.rs +++ b/pallets/runtime/tests/src/settlement_pallet/transfer_funds.rs @@ -1310,7 +1310,7 @@ fn cross_identity_nft_transfer_when_portfolio_is_frozen() { AssetHolder::Account(bob.acc()), non_fungible_fund(asset_id, NFTId(1)), ), - SettlementError::FailedAssetTransferringConditions + AssetError::InvalidTransferSenderIsFrozen ); }); }