git.delta.rocks / unique-network / refs/commits / 6cd8e0c2387a

difftreelog

source

pallets/fungible/src/common.rs5.2 KiBsourcehistory
1use core::marker::PhantomData;23use frame_support::{dispatch::DispatchResultWithPostInfo, ensure, fail, weights::Weight};4use nft_data_structs::TokenId;5use pallet_common::{6	CommonCollectionOperations, CommonWeightInfo, account::CrossAccountId, with_weight,7};8use sp_runtime::ArithmeticError;9use sp_std::{vec::Vec, vec};1011use crate::{12	Allowance, Balance, Config, Error, FungibleHandle, Pallet, SelfWeightOf, weights::WeightInfo,13};1415pub struct CommonWeights<T: Config>(PhantomData<T>);16impl<T: Config> CommonWeightInfo for CommonWeights<T> {17	fn create_item() -> Weight {18		<SelfWeightOf<T>>::create_item()19	}2021	fn create_multiple_items(_amount: u32) -> Weight {22		Self::create_item()23	}2425	fn burn_item() -> Weight {26		<SelfWeightOf<T>>::burn_item()27	}2829	fn transfer() -> Weight {30		<SelfWeightOf<T>>::transfer()31	}3233	fn approve() -> Weight {34		<SelfWeightOf<T>>::approve()35	}3637	fn transfer_from() -> Weight {38		<SelfWeightOf<T>>::transfer_from()39	}4041	fn burn_from() -> Weight {42		043	}4445	fn set_variable_metadata(_bytes: u32) -> Weight {46		// Error47		048	}49}5051impl<T: Config> CommonCollectionOperations<T> for FungibleHandle<T> {52	fn create_item(53		&self,54		sender: T::CrossAccountId,55		to: T::CrossAccountId,56		data: nft_data_structs::CreateItemData,57	) -> DispatchResultWithPostInfo {58		match data {59			nft_data_structs::CreateItemData::Fungible(data) => with_weight(60				<Pallet<T>>::create_item(self, &sender, (to, data.value)),61				<CommonWeights<T>>::create_item(),62			),63			_ => fail!(<Error<T>>::NotFungibleDataUsedToMintFungibleCollectionToken),64		}65	}6667	fn create_multiple_items(68		&self,69		sender: T::CrossAccountId,70		to: T::CrossAccountId,71		data: Vec<nft_data_structs::CreateItemData>,72	) -> DispatchResultWithPostInfo {73		let mut sum: u128 = 0;74		for data in data {75			match data {76				nft_data_structs::CreateItemData::Fungible(data) => {77					sum = sum78						.checked_add(data.value)79						.ok_or(ArithmeticError::Overflow)?;80				}81				_ => fail!(<Error<T>>::NotFungibleDataUsedToMintFungibleCollectionToken),82			}83		}8485		with_weight(86			<Pallet<T>>::create_item(self, &sender, (to, sum)),87			<CommonWeights<T>>::create_item(),88		)89	}9091	fn burn_item(92		&self,93		sender: T::CrossAccountId,94		token: TokenId,95		amount: u128,96	) -> DispatchResultWithPostInfo {97		ensure!(98			token == TokenId::default(),99			<Error<T>>::FungibleItemsHaveNoId100		);101102		with_weight(103			<Pallet<T>>::burn(self, &sender, amount),104			<CommonWeights<T>>::burn_item(),105		)106	}107108	fn transfer(109		&self,110		from: T::CrossAccountId,111		to: T::CrossAccountId,112		token: TokenId,113		amount: u128,114	) -> DispatchResultWithPostInfo {115		ensure!(116			token == TokenId::default(),117			<Error<T>>::FungibleItemsHaveNoId118		);119120		with_weight(121			<Pallet<T>>::transfer(&self, &from, &to, amount),122			<CommonWeights<T>>::transfer(),123		)124	}125126	fn approve(127		&self,128		sender: T::CrossAccountId,129		spender: T::CrossAccountId,130		token: TokenId,131		amount: u128,132	) -> DispatchResultWithPostInfo {133		ensure!(134			token == TokenId::default(),135			<Error<T>>::FungibleItemsHaveNoId136		);137138		with_weight(139			<Pallet<T>>::set_allowance(&self, &sender, &spender, amount),140			<CommonWeights<T>>::approve(),141		)142	}143144	fn transfer_from(145		&self,146		sender: T::CrossAccountId,147		from: T::CrossAccountId,148		to: T::CrossAccountId,149		token: TokenId,150		amount: u128,151	) -> DispatchResultWithPostInfo {152		ensure!(153			token == TokenId::default(),154			<Error<T>>::FungibleItemsHaveNoId155		);156157		with_weight(158			<Pallet<T>>::transfer_from(&self, &sender, &from, &to, amount),159			<CommonWeights<T>>::transfer_from(),160		)161	}162163	fn burn_from(164		&self,165		sender: T::CrossAccountId,166		from: T::CrossAccountId,167		token: TokenId,168		amount: u128,169	) -> DispatchResultWithPostInfo {170		ensure!(171			token == TokenId::default(),172			<Error<T>>::FungibleItemsHaveNoId173		);174175		with_weight(176			<Pallet<T>>::burn_from(&self, &sender, &from, amount),177			<CommonWeights<T>>::burn_from(),178		)179	}180181	fn set_variable_metadata(182		&self,183		_sender: T::CrossAccountId,184		_token: TokenId,185		_data: Vec<u8>,186	) -> DispatchResultWithPostInfo {187		fail!(<Error<T>>::FungibleItemsHaveData)188	}189190	fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {191		if <Balance<T>>::get((self.id, account.as_sub())) != 0 {192			vec![TokenId::default()]193		} else {194			vec![]195		}196	}197198	fn token_exists(&self, token: TokenId) -> bool {199		token == TokenId::default()200	}201202	fn last_token_id(&self) -> TokenId {203		TokenId::default()204	}205206	fn token_owner(&self, _token: TokenId) -> T::CrossAccountId {207		T::CrossAccountId::default()208	}209	fn const_metadata(&self, _token: TokenId) -> Vec<u8> {210		Vec::new()211	}212	fn variable_metadata(&self, _token: TokenId) -> Vec<u8> {213		Vec::new()214	}215216	fn collection_tokens(&self) -> u32 {217		1218	}219220	fn account_balance(&self, account: T::CrossAccountId) -> u32 {221		if <Balance<T>>::get((self.id, account.as_sub())) != 0 {222			1223		} else {224			0225		}226	}227228	fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {229		if token != TokenId::default() {230			return 0;231		}232		<Balance<T>>::get((self.id, account.as_sub()))233	}234235	fn allowance(236		&self,237		sender: T::CrossAccountId,238		spender: T::CrossAccountId,239		token: TokenId,240	) -> u128 {241		if token != TokenId::default() {242			return 0;243		}244		<Allowance<T>>::get((self.id, sender.as_sub(), spender.as_sub()))245	}246}