Skip to content

Commit 6485ffd

Browse files
authored
Merge pull request #226 from rmrk-team/bug/224-prevent-listing-frozen-nfts
Prevent frozen NFTs from being listed
2 parents 31de45c + e69d8a3 commit 6485ffd

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

pallets/rmrk-market/src/lib.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ pub use pallet::*;
3535
pub mod pallet {
3636
use super::*;
3737
use crate::types::ListInfo;
38-
use frame_support::pallet_prelude::*;
38+
use frame_support::{pallet_prelude::*, traits::tokens::nonfungibles::Inspect};
3939
use frame_system::pallet_prelude::*;
4040
use sp_runtime::Permill;
4141

@@ -254,6 +254,12 @@ pub mod pallet {
254254
// Check NFT is transferable
255255
pallet_rmrk_core::Pallet::<T>::check_is_transferable(&nft)?;
256256

257+
// Check if NFT is frozen
258+
ensure!(
259+
pallet_uniques::Pallet::<T>::can_transfer(&collection_id, &nft_id),
260+
pallet_uniques::Error::<T>::Frozen
261+
);
262+
257263
// Lock NFT to prevent transfers or interactions with the NFT
258264
pallet_rmrk_core::Pallet::<T>::set_lock((collection_id, nft_id), true);
259265

pallets/rmrk-market/src/tests.rs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use super::*;
66
use crate::mock::*;
77
use frame_support::{assert_noop, assert_ok};
8-
use mock::{Event as MockEvent};
8+
use mock::Event as MockEvent;
99

1010
use sp_runtime::Permill;
1111
use sp_std::convert::TryInto;
@@ -130,6 +130,36 @@ fn list_non_transferable_fail() {
130130
});
131131
}
132132

133+
#[test]
134+
fn list_frozen_fail() {
135+
new_test_ext().execute_with(|| {
136+
// Create a basic collection
137+
assert_ok!(basic_collection());
138+
// Mint non-transferable NFT
139+
assert_ok!(RmrkCore::mint_nft(
140+
Origin::signed(ALICE),
141+
Some(ALICE),
142+
NFT_ID_0,
143+
COLLECTION_ID_0,
144+
Some(ALICE),
145+
Some(Permill::from_float(1.525)),
146+
bvec![0u8; 20],
147+
true, // transferable
148+
None,
149+
));
150+
// freeze NFT
151+
assert_ok!(pallet_uniques::Pallet::<Test>::freeze(
152+
Origin::signed(ALICE),
153+
COLLECTION_ID_0,
154+
NFT_ID_0
155+
));
156+
assert_noop!(
157+
RmrkMarket::list(Origin::signed(ALICE), COLLECTION_ID_0, 0, 10u128, None,),
158+
pallet_uniques::Error::<Test>::Frozen
159+
);
160+
});
161+
}
162+
133163
#[test]
134164
fn buy_works() {
135165
new_test_ext().execute_with(|| {

0 commit comments

Comments
 (0)