git.delta.rocks / unique-network / refs/commits / bfbca7684ca5

difftreelog

source

pallets/fungible/src/common.rs4.7 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 set_variable_metadata(_bytes: u32) -> Weight {42		// Error43		044	}45}4647impl<T: Config> CommonCollectionOperations<T> for FungibleHandle<T> {48	fn create_item(49		&self,50		sender: T::CrossAccountId,51		to: T::CrossAccountId,52		data: nft_data_structs::CreateItemData,53	) -> DispatchResultWithPostInfo {54		match data {55			nft_data_structs::CreateItemData::Fungible(data) => with_weight(56				<Pallet<T>>::create_item(self, &sender, (to, data.value)),57				<SelfWeightOf<T>>::create_item(),58			),59			_ => fail!(<Error<T>>::NotFungibleDataUsedToMintFungibleCollectionToken),60		}61	}6263	fn create_multiple_items(64		&self,65		sender: T::CrossAccountId,66		to: T::CrossAccountId,67		data: Vec<nft_data_structs::CreateItemData>,68	) -> DispatchResultWithPostInfo {69		let mut sum: u128 = 0;70		for data in data {71			match data {72				nft_data_structs::CreateItemData::Fungible(data) => {73					sum = sum74						.checked_add(data.value)75						.ok_or(ArithmeticError::Overflow)?;76				}77				_ => fail!(<Error<T>>::NotFungibleDataUsedToMintFungibleCollectionToken),78			}79		}8081		with_weight(82			<Pallet<T>>::create_item(self, &sender, (to, sum)),83			<SelfWeightOf<T>>::create_item(),84		)85	}8687	fn burn_item(88		&self,89		sender: T::CrossAccountId,90		token: TokenId,91		amount: u128,92	) -> DispatchResultWithPostInfo {93		ensure!(94			token == TokenId::default(),95			<Error<T>>::FungibleItemsHaveNoId96		);9798		with_weight(99			<Pallet<T>>::burn(self, &sender, amount),100			<SelfWeightOf<T>>::burn_item(),101		)102	}103104	fn transfer(105		&self,106		from: T::CrossAccountId,107		to: T::CrossAccountId,108		token: TokenId,109		amount: u128,110	) -> DispatchResultWithPostInfo {111		ensure!(112			token == TokenId::default(),113			<Error<T>>::FungibleItemsHaveNoId114		);115116		with_weight(117			<Pallet<T>>::transfer(&self, &from, &to, 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		ensure!(130			token == TokenId::default(),131			<Error<T>>::FungibleItemsHaveNoId132		);133134		with_weight(135			<Pallet<T>>::set_allowance(&self, &sender, &spender, amount),136			<SelfWeightOf<T>>::approve(),137		)138	}139140	fn transfer_from(141		&self,142		sender: T::CrossAccountId,143		from: T::CrossAccountId,144		to: T::CrossAccountId,145		token: TokenId,146		amount: u128,147	) -> DispatchResultWithPostInfo {148		ensure!(149			token == TokenId::default(),150			<Error<T>>::FungibleItemsHaveNoId151		);152153		with_weight(154			<Pallet<T>>::transfer_from(&self, &sender, &from, &to, amount),155			<SelfWeightOf<T>>::transfer_from(),156		)157	}158159	fn set_variable_metadata(160		&self,161		_sender: T::CrossAccountId,162		_token: TokenId,163		_data: Vec<u8>,164	) -> DispatchResultWithPostInfo {165		fail!(<Error<T>>::FungibleItemsHaveData)166	}167168	fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {169		if <Balance<T>>::get((self.id, account.as_sub())) != 0 {170			vec![TokenId::default()]171		} else {172			vec![]173		}174	}175176	fn token_exists(&self, token: TokenId) -> bool {177		token == TokenId::default()178	}179180	fn token_owner(&self, _token: TokenId) -> T::CrossAccountId {181		T::CrossAccountId::default()182	}183	fn const_metadata(&self, _token: TokenId) -> Vec<u8> {184		Vec::new()185	}186	fn variable_metadata(&self, _token: TokenId) -> Vec<u8> {187		Vec::new()188	}189190	fn collection_tokens(&self) -> u32 {191		1192	}193194	fn account_balance(&self, account: T::CrossAccountId) -> u32 {195		if <Balance<T>>::get((self.id, account.as_sub())) != 0 {196			1197		} else {198			0199		}200	}201202	fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {203		if token != TokenId::default() {204			return 0;205		}206		<Balance<T>>::get((self.id, account.as_sub()))207	}208209	fn allowance(210		&self,211		sender: T::CrossAccountId,212		spender: T::CrossAccountId,213		token: TokenId,214	) -> u128 {215		if token != TokenId::default() {216			return 0;217		}218		<Allowance<T>>::get((self.id, sender.as_sub(), spender.as_sub()))219	}220}