From fd1b13e560d7e3f42f2496d290772b569b27c795 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 14 Sep 2026 16:33:08 -0300 Subject: [PATCH 1/2] Add frozen checks in trasnfer_report; Return error when locking an nft in a frozen portfolio --- pallets/asset/src/lib.rs | 9 ++++++++- pallets/nft/src/lib.rs | 7 +++++++ .../tests/src/settlement_pallet/transfer_funds.rs | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) 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..930362788b 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 + SettlementError::InvalidTransferSenderIsFrozen ); }); } From 3bd55d0137ffef829467181982318c9db63e5fe6 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 14 Sep 2026 16:45:03 -0300 Subject: [PATCH 2/2] Update error type in unit test --- pallets/runtime/tests/src/settlement_pallet/transfer_funds.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/runtime/tests/src/settlement_pallet/transfer_funds.rs b/pallets/runtime/tests/src/settlement_pallet/transfer_funds.rs index 930362788b..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::InvalidTransferSenderIsFrozen + AssetError::InvalidTransferSenderIsFrozen ); }); }