Skip to content

Commit 218fe30

Browse files
authored
Merge pull request #136 from rmrk-team/bug/120-split-resource-into-composable-slot-basic
Bug/120 split resource into composable slot basic
2 parents 8096ad3 + 20e5958 commit 218fe30

File tree

8 files changed

+341
-206
lines changed

8 files changed

+341
-206
lines changed

pallets/rmrk-core/src/functions.rs

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -80,42 +80,23 @@ where
8080
collection_id: CollectionId,
8181
nft_id: NftId,
8282
resource_id: BoundedResource<T::ResourceSymbolLimit>,
83-
base: Option<BaseId>,
84-
src: Option<BoundedVec<u8, T::StringLimit>>,
85-
metadata: Option<BoundedVec<u8, T::StringLimit>>,
86-
slot: Option<SlotId>,
87-
license: Option<BoundedVec<u8, T::StringLimit>>,
88-
thumb: Option<BoundedVec<u8, T::StringLimit>>,
89-
parts: Option<BoundedVec<PartId, T::PartsLimit>>,
83+
resource: ResourceTypes<BoundedVec<u8, T::StringLimit>, BoundedVec<PartId, T::PartsLimit>>,
9084
) -> DispatchResult {
9185
let collection = Self::collections(collection_id).ok_or(Error::<T>::CollectionUnknown)?;
9286
ensure!(collection.issuer == sender, Error::<T>::NoPermission);
9387
let (root_owner, _) = Pallet::<T>::lookup_root_owner(collection_id, nft_id)?;
9488
// Check NFT lock status
9589
ensure!(!Pallet::<T>::is_locked(collection_id, nft_id), pallet_uniques::Error::<T>::Locked);
9690

97-
let empty =
98-
base.is_none() &&
99-
src.is_none() && metadata.is_none() &&
100-
slot.is_none() && license.is_none() &&
101-
thumb.is_none();
102-
ensure!(!empty, Error::<T>::EmptyResource);
103-
10491
let res = ResourceInfo::<
10592
BoundedVec<u8, T::ResourceSymbolLimit>,
10693
BoundedVec<u8, T::StringLimit>,
10794
BoundedVec<PartId, T::PartsLimit>,
10895
> {
10996
id: resource_id.clone(),
110-
base,
111-
src,
112-
metadata,
113-
slot,
114-
license,
115-
thumb,
116-
parts,
11797
pending: root_owner != sender,
11898
pending_removal: false,
99+
resource
119100
};
120101
Resources::<T>::insert((collection_id, nft_id, resource_id), res);
121102

pallets/rmrk-core/src/lib.rs

Lines changed: 53 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use sp_std::convert::TryInto;
1313
use rmrk_traits::{
1414
primitives::*, AccountIdOrCollectionNftTuple, Collection, CollectionInfo, Nft, NftInfo,
1515
Priority, Property, Resource, ResourceInfo, RoyaltyInfo,
16+
ResourceTypes, BasicResource, SlotResource, ComposableResource
1617
};
1718
use sp_std::result::Result;
1819

@@ -574,21 +575,15 @@ pub mod pallet {
574575
Ok(())
575576
}
576577

577-
/// Create resource
578+
/// Create basic resource
578579
#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
579580
#[transactional]
580-
pub fn add_resource(
581+
pub fn add_basic_resource(
581582
origin: OriginFor<T>,
582583
collection_id: CollectionId,
583584
nft_id: NftId,
584585
resource_id: BoundedResource<T::ResourceSymbolLimit>,
585-
base: Option<BaseId>,
586-
src: Option<BoundedVec<u8, T::StringLimit>>,
587-
metadata: Option<BoundedVec<u8, T::StringLimit>>,
588-
slot: Option<SlotId>,
589-
license: Option<BoundedVec<u8, T::StringLimit>>,
590-
thumb: Option<BoundedVec<u8, T::StringLimit>>,
591-
parts: Option<BoundedVec<PartId, T::PartsLimit>>,
586+
resource: BasicResource<StringLimitOf<T>>,
592587
) -> DispatchResult {
593588
let sender = ensure_signed(origin.clone())?;
594589

@@ -597,13 +592,55 @@ pub mod pallet {
597592
collection_id,
598593
nft_id,
599594
resource_id.clone(),
600-
base,
601-
src,
602-
metadata,
603-
slot,
604-
license,
605-
thumb,
606-
parts,
595+
ResourceTypes::Basic(resource),
596+
)?;
597+
598+
Self::deposit_event(Event::ResourceAdded { nft_id, resource_id });
599+
Ok(())
600+
}
601+
602+
/// Create composable resource
603+
#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
604+
#[transactional]
605+
pub fn add_composable_resource(
606+
origin: OriginFor<T>,
607+
collection_id: CollectionId,
608+
nft_id: NftId,
609+
resource_id: BoundedResource<T::ResourceSymbolLimit>,
610+
resource: ComposableResource<StringLimitOf<T>, BoundedVec<PartId, T::PartsLimit>>,
611+
) -> DispatchResult {
612+
let sender = ensure_signed(origin.clone())?;
613+
614+
Self::resource_add(
615+
sender,
616+
collection_id,
617+
nft_id,
618+
resource_id.clone(),
619+
ResourceTypes::Composable(resource),
620+
)?;
621+
622+
Self::deposit_event(Event::ResourceAdded { nft_id, resource_id });
623+
Ok(())
624+
}
625+
626+
/// Create slot resource
627+
#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
628+
#[transactional]
629+
pub fn add_slot_resource(
630+
origin: OriginFor<T>,
631+
collection_id: CollectionId,
632+
nft_id: NftId,
633+
resource_id: BoundedResource<T::ResourceSymbolLimit>,
634+
resource: SlotResource<StringLimitOf<T>>,
635+
) -> DispatchResult {
636+
let sender = ensure_signed(origin.clone())?;
637+
638+
Self::resource_add(
639+
sender,
640+
collection_id,
641+
nft_id,
642+
resource_id.clone(),
643+
ResourceTypes::Slot(resource),
607644
)?;
608645

609646
Self::deposit_event(Event::ResourceAdded { nft_id, resource_id });

0 commit comments

Comments
 (0)