git.delta.rocks / unique-network / refs/commits / 5db875a32d8f

difftreelog

source

pallets/refungible/src/common.rs4.9 KiBsourcehistory
1use core::marker::PhantomData;23use sp_std::collections::btree_map::BTreeMap;4use frame_support::{dispatch::DispatchResultWithPostInfo, fail, weights::Weight};5use nft_data_structs::TokenId;6use pallet_common::{7	CommonCollectionOperations, CommonWeightInfo, account::CrossAccountId, with_weight,8};9use sp_runtime::DispatchError;10use sp_std::vec::Vec;1112use crate::{13	AccountBalance, Allowance, Balance, Config, CreateItemData, DataKind, Error, Owned, Pallet,14	RefungibleHandle, SelfWeightOf, TokenData, weights::WeightInfo,15};1617pub struct CommonWeights<T: Config>(PhantomData<T>);18impl<T: Config> CommonWeightInfo for CommonWeights<T> {19	fn create_item() -> Weight {20		<SelfWeightOf<T>>::create_item()21	}2223	fn create_multiple_items(amount: u32) -> Weight {24		<SelfWeightOf<T>>::create_multiple_items(amount)25	}2627	fn burn_item() -> Weight {28		<SelfWeightOf<T>>::burn_item()29	}3031	fn transfer() -> Weight {32		<SelfWeightOf<T>>::transfer()33	}3435	fn approve() -> Weight {36		<SelfWeightOf<T>>::approve()37	}3839	fn transfer_from() -> Weight {40		<SelfWeightOf<T>>::transfer_from()41	}4243	fn set_variable_metadata(_bytes: u32) -> Weight {44		<SelfWeightOf<T>>::set_variable_metadata()45	}46}4748fn map_create_data<T: Config>(49	data: nft_data_structs::CreateItemData,50	to: &T::CrossAccountId,51) -> Result<CreateItemData<T>, DispatchError> {52	match data {53		nft_data_structs::CreateItemData::ReFungible(data) => Ok(CreateItemData {54			const_data: data.const_data,55			variable_data: data.variable_data,56			users: {57				let mut out = BTreeMap::new();58				out.insert(to.clone(), data.pieces);59				out60			},61		}),62		_ => fail!(<Error<T>>::NotRefungibleDataUsedToMintFungibleCollectionToken),63	}64}6566impl<T: Config> CommonCollectionOperations<T> for RefungibleHandle<T> {67	fn create_item(68		&self,69		sender: T::CrossAccountId,70		to: T::CrossAccountId,71		data: nft_data_structs::CreateItemData,72	) -> DispatchResultWithPostInfo {73		with_weight(74			<Pallet<T>>::create_item(self, &sender, map_create_data(data, &to)?),75			<SelfWeightOf<T>>::create_item(),76		)77	}7879	fn create_multiple_items(80		&self,81		sender: T::CrossAccountId,82		to: T::CrossAccountId,83		data: Vec<nft_data_structs::CreateItemData>,84	) -> DispatchResultWithPostInfo {85		let data = data86			.into_iter()87			.map(|d| map_create_data::<T>(d, &to))88			.collect::<Result<Vec<_>, DispatchError>>()?;8990		let amount = data.len();91		with_weight(92			<Pallet<T>>::create_multiple_items(self, &sender, data),93			<SelfWeightOf<T>>::create_multiple_items(amount as u32),94		)95	}9697	fn burn_item(98		&self,99		sender: T::CrossAccountId,100		token: TokenId,101		amount: u128,102	) -> DispatchResultWithPostInfo {103		with_weight(104			<Pallet<T>>::burn(self, &sender, token, amount),105			<SelfWeightOf<T>>::burn_item(),106		)107	}108109	fn transfer(110		&self,111		from: T::CrossAccountId,112		to: T::CrossAccountId,113		token: TokenId,114		amount: u128,115	) -> DispatchResultWithPostInfo {116		with_weight(117			<Pallet<T>>::transfer(&self, &from, &to, token, amount),118			<SelfWeightOf<T>>::transfer(),119		)120	}121122	fn approve(123		&self,124		sender: T::CrossAccountId,125		spender: T::CrossAccountId,126		token: TokenId,127		amount: u128,128	) -> DispatchResultWithPostInfo {129		with_weight(130			<Pallet<T>>::set_allowance(&self, &sender, &spender, token, amount),131			<SelfWeightOf<T>>::approve(),132		)133	}134135	fn transfer_from(136		&self,137		sender: T::CrossAccountId,138		from: T::CrossAccountId,139		to: T::CrossAccountId,140		token: TokenId,141		amount: u128,142	) -> DispatchResultWithPostInfo {143		with_weight(144			<Pallet<T>>::transfer_from(&self, &sender, &from, &to, token, amount),145			<SelfWeightOf<T>>::approve(),146		)147	}148149	fn set_variable_metadata(150		&self,151		sender: T::CrossAccountId,152		token: TokenId,153		data: Vec<u8>,154	) -> DispatchResultWithPostInfo {155		with_weight(156			<Pallet<T>>::set_variable_metadata(&self, &sender, token, data),157			<SelfWeightOf<T>>::set_variable_metadata(),158		)159	}160161	fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {162		<Owned<T>>::iter_prefix((self.id, account.as_sub()))163			.map(|(id, _)| id)164			.collect()165	}166167	fn token_exists(&self, token: TokenId) -> bool {168		<Pallet<T>>::token_exists(self, token)169	}170171	fn token_owner(&self, _token: TokenId) -> T::CrossAccountId {172		T::CrossAccountId::default()173	}174	fn const_metadata(&self, token: TokenId) -> Vec<u8> {175		<TokenData<T>>::get((self.id, token, DataKind::Constant))176	}177	fn variable_metadata(&self, token: TokenId) -> Vec<u8> {178		<TokenData<T>>::get((self.id, token, DataKind::Variable))179	}180181	fn collection_tokens(&self) -> u32 {182		<Pallet<T>>::total_supply(self)183	}184185	fn account_balance(&self, account: T::CrossAccountId) -> u32 {186		<AccountBalance<T>>::get((self.id, account.as_sub()))187	}188189	fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {190		<Balance<T>>::get((self.id, token, account.as_sub()))191	}192193	fn allowance(194		&self,195		sender: T::CrossAccountId,196		spender: T::CrossAccountId,197		token: TokenId,198	) -> u128 {199		<Allowance<T>>::get((self.id, token, sender.as_sub(), spender))200	}201}