difftreelog
feat(rmrk) add resource at minting
in: master
2 files changed
pallets/proxy-rmrk-core/src/lib.rsdiffbeforeafterboth353 royalty_amount: Option<Permill>,353 royalty_amount: Option<Permill>,354 metadata: RmrkString,354 metadata: RmrkString,355 transferable: bool,355 transferable: bool,356 resources: Option<BoundedVec<RmrkResourceTypes, MaxResourcesOnMint>>356 ) -> DispatchResult {357 ) -> DispatchResult {357 let sender = ensure_signed(origin)?;358 let sender = ensure_signed(origin)?;358 let sender = T::CrossAccountId::from_sub(sender);359 let cross_sender = T::CrossAccountId::from_sub(sender.clone());359 let cross_owner = T::CrossAccountId::from_sub(owner.clone());360 let cross_owner = T::CrossAccountId::from_sub(owner.clone());360361361 let collection = Self::get_typed_nft_collection(362 let collection = Self::get_typed_nft_collection(370 });371 });371372372 let nft_id = Self::create_nft(373 let nft_id = Self::create_nft(373 &sender,374 &cross_sender,374 &cross_owner,375 &cross_owner,375 &collection,376 &collection,376 [377 [390 err => Self::map_unique_err_to_proxy(err),391 err => Self::map_unique_err_to_proxy(err),391 })?;392 })?;393394 if let Some(resources) = resources {395 for resource in resources {396 Self::resource_add(397 sender.clone(),398 collection.id,399 nft_id,400 resource401 )?;402 }403 }392404393 Self::deposit_event(Event::NftMinted {405 Self::deposit_event(Event::NftMinted {394 owner,406 owner,921 sender,933 sender,922 collection_id,934 collection_id,923 nft_id.into(),935 nft_id.into(),924 [925 Self::rmrk_property(TokenType, &NftType::Resource)?,926 Self::rmrk_property(ResourceType, &misc::ResourceType::Basic)?,936 RmrkResourceTypes::Basic(resource),927 Self::rmrk_property(Src, &resource.src)?,928 Self::rmrk_property(Metadata, &resource.metadata)?,929 Self::rmrk_property(License, &resource.license)?,930 Self::rmrk_property(Thumb, &resource.thumb)?,931 ]932 .into_iter(),933 )?;937 )?;934938935 Self::deposit_event(Event::ResourceAdded {939 Self::deposit_event(Event::ResourceAdded {959 sender,963 sender,960 collection_id,964 collection_id,961 nft_id.into(),965 nft_id.into(),962 [963 Self::rmrk_property(TokenType, &NftType::Resource)?,964 Self::rmrk_property(ResourceType, &misc::ResourceType::Composable)?,966 RmrkResourceTypes::Composable(resource)965 Self::rmrk_property(Parts, &resource.parts)?,966 Self::rmrk_property(Base, &resource.base)?,967 Self::rmrk_property(Src, &resource.src)?,968 Self::rmrk_property(Metadata, &resource.metadata)?,969 Self::rmrk_property(License, &resource.license)?,970 Self::rmrk_property(Thumb, &resource.thumb)?,971 ]972 .into_iter(),973 )?;967 )?;974968975 Self::deposit_event(Event::ResourceAdded {969 Self::deposit_event(Event::ResourceAdded {999 sender,993 sender,1000 collection_id,994 collection_id,1001 nft_id.into(),995 nft_id.into(),1002 [1003 Self::rmrk_property(TokenType, &NftType::Resource)?,1004 Self::rmrk_property(ResourceType, &misc::ResourceType::Slot)?,1005 Self::rmrk_property(Base, &resource.base)?,1006 Self::rmrk_property(Src, &resource.src)?,1007 Self::rmrk_property(Metadata, &resource.metadata)?,1008 Self::rmrk_property(Slot, &resource.slot)?,996 RmrkResourceTypes::Slot(resource),1009 Self::rmrk_property(License, &resource.license)?,1010 Self::rmrk_property(Thumb, &resource.thumb)?,1011 ]1012 .into_iter(),1013 )?;997 )?;10149981015 Self::deposit_event(Event::ResourceAdded {999 Self::deposit_event(Event::ResourceAdded {1174 )1158 )1175 }1159 }117611601177 fn resource_add(1161 fn resource_add(1162 sender: T::AccountId,1163 collection_id: CollectionId,1164 nft_id: TokenId,1165 resource: RmrkResourceTypes1166 ) -> Result<RmrkResourceId, DispatchError> {1167 match resource {1168 RmrkResourceTypes::Basic(resource) => {1169 Self::resource_add_helper(1170 sender,1171 collection_id,1172 nft_id,1173 [1174 Self::rmrk_property(TokenType, &NftType::Resource)?,1175 Self::rmrk_property(ResourceType, &misc::ResourceType::Basic)?,1176 Self::rmrk_property(Src, &resource.src)?,1177 Self::rmrk_property(Metadata, &resource.metadata)?,1178 Self::rmrk_property(License, &resource.license)?,1179 Self::rmrk_property(Thumb, &resource.thumb)?,1180 ]1181 .into_iter(),1182 )1183 },1184 RmrkResourceTypes::Composable(resource) => {1185 Self::resource_add_helper(1186 sender,1187 collection_id,1188 nft_id.into(),1189 [1190 Self::rmrk_property(TokenType, &NftType::Resource)?,1191 Self::rmrk_property(ResourceType, &misc::ResourceType::Composable)?,1192 Self::rmrk_property(Parts, &resource.parts)?,1193 Self::rmrk_property(Base, &resource.base)?,1194 Self::rmrk_property(Src, &resource.src)?,1195 Self::rmrk_property(Metadata, &resource.metadata)?,1196 Self::rmrk_property(License, &resource.license)?,1197 Self::rmrk_property(Thumb, &resource.thumb)?,1198 ]1199 .into_iter(),1200 )1201 },1202 RmrkResourceTypes::Slot(resource) => {1203 Self::resource_add_helper(1204 sender,1205 collection_id,1206 nft_id.into(),1207 [1208 Self::rmrk_property(TokenType, &NftType::Resource)?,1209 Self::rmrk_property(ResourceType, &misc::ResourceType::Slot)?,1210 Self::rmrk_property(Base, &resource.base)?,1211 Self::rmrk_property(Src, &resource.src)?,1212 Self::rmrk_property(Metadata, &resource.metadata)?,1213 Self::rmrk_property(Slot, &resource.slot)?,1214 Self::rmrk_property(License, &resource.license)?,1215 Self::rmrk_property(Thumb, &resource.thumb)?,1216 ]1217 .into_iter(),1218 )1219 }1220 }1221 }12221223 fn resource_add_helper(1178 sender: T::AccountId,1224 sender: T::AccountId,1179 collection_id: CollectionId,1225 collection_id: CollectionId,1180 token_id: TokenId,1226 token_id: TokenId,primitives/data-structs/src/lib.rsdiffbeforeafterboth952 pub const RmrkPartsLimit: u32 = 25;952 pub const RmrkPartsLimit: u32 = 25;953 #[derive(PartialEq)]953 #[derive(PartialEq)]954 pub const RmrkMaxPriorities: u32 = 25;954 pub const RmrkMaxPriorities: u32 = 25;955 #[derive(PartialEq)]956 pub const MaxResourcesOnMint: u32 = 100;955}957}956958957impl From<RmrkCollectionId> for CollectionId {959impl From<RmrkCollectionId> for CollectionId {