1use alloc::{vec, vec::Vec};2use core::marker::PhantomData;3use crate::{Config, NativeFungibleHandle, Pallet};4use frame_support::{fail, traits::Currency, weights::Weight};5use pallet_balances::{weights::SubstrateWeight as BalancesWeight, WeightInfo};6use pallet_common::{erc::CrossAccountId, CommonCollectionOperations, CommonWeightInfo};7use up_data_structs::TokenId;89pub struct CommonWeights<T: Config>(PhantomData<T>);10impl<T: Config> CommonWeightInfo<T::CrossAccountId> for CommonWeights<T> {11 fn create_multiple_items(_amount: &[up_data_structs::CreateItemData]) -> Weight {12 Weight::default()13 }1415 fn create_multiple_items_ex(16 _cost: &up_data_structs::CreateItemExData<T::CrossAccountId>,17 ) -> Weight {18 Weight::default()19 }2021 fn burn_item() -> Weight {22 Weight::default()23 }2425 fn set_collection_properties(_amount: u32) -> Weight {26 Weight::default()27 }2829 fn delete_collection_properties(_amount: u32) -> Weight {30 Weight::default()31 }3233 fn set_token_properties(_amount: u32) -> Weight {34 Weight::default()35 }3637 fn delete_token_properties(_amount: u32) -> Weight {38 Weight::default()39 }4041 fn set_token_property_permissions(_amount: u32) -> Weight {42 Weight::default()43 }4445 fn transfer() -> Weight {46 <BalancesWeight<T> as WeightInfo>::transfer()47 }4849 fn approve() -> Weight {50 Weight::default()51 }5253 fn approve_from() -> Weight {54 Weight::default()55 }5657 fn transfer_from() -> Weight {58 <BalancesWeight<T> as WeightInfo>::transfer()59 }6061 fn burn_from() -> Weight {62 Weight::default()63 }6465 fn burn_recursively_self_raw() -> Weight {66 Weight::default()67 }6869 fn burn_recursively_breadth_raw(_amount: u32) -> Weight {70 Weight::default()71 }7273 fn token_owner() -> Weight {74 Weight::default()75 }7677 fn set_allowance_for_all() -> Weight {78 Weight::default()79 }8081 fn force_repair_item() -> Weight {82 Weight::default()83 }84}85868788impl<T: Config> CommonCollectionOperations<T> for NativeFungibleHandle<T> {89 fn create_item(90 &self,91 _sender: <T>::CrossAccountId,92 _to: <T>::CrossAccountId,93 _data: up_data_structs::CreateItemData,94 _nesting_budget: &dyn up_data_structs::budget::Budget,95 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {96 fail!(<pallet_common::Error<T>>::UnsupportedOperation);97 }9899 fn create_multiple_items(100 &self,101 _sender: <T>::CrossAccountId,102 _to: <T>::CrossAccountId,103 _data: Vec<up_data_structs::CreateItemData>,104 _nesting_budget: &dyn up_data_structs::budget::Budget,105 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {106 fail!(<pallet_common::Error<T>>::UnsupportedOperation);107 }108109 fn create_multiple_items_ex(110 &self,111 _sender: <T>::CrossAccountId,112 _data: up_data_structs::CreateItemExData<<T>::CrossAccountId>,113 _nesting_budget: &dyn up_data_structs::budget::Budget,114 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {115 fail!(<pallet_common::Error<T>>::UnsupportedOperation);116 }117118 fn burn_item(119 &self,120 _sender: <T>::CrossAccountId,121 _token: TokenId,122 _amount: u128,123 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {124 fail!(<pallet_common::Error<T>>::UnsupportedOperation);125 }126127 fn burn_item_recursively(128 &self,129 _sender: <T>::CrossAccountId,130 _token: TokenId,131 _self_budget: &dyn up_data_structs::budget::Budget,132 _breadth_budget: &dyn up_data_structs::budget::Budget,133 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {134 fail!(<pallet_common::Error<T>>::UnsupportedOperation);135 }136137 fn set_collection_properties(138 &self,139 _sender: <T>::CrossAccountId,140 _properties: Vec<up_data_structs::Property>,141 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {142 fail!(<pallet_common::Error<T>>::UnsupportedOperation);143 }144145 fn delete_collection_properties(146 &self,147 _sender: &<T>::CrossAccountId,148 _property_keys: Vec<up_data_structs::PropertyKey>,149 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {150 fail!(<pallet_common::Error<T>>::UnsupportedOperation);151 }152153 fn set_token_properties(154 &self,155 _sender: <T>::CrossAccountId,156 _token_id: TokenId,157 _properties: Vec<up_data_structs::Property>,158 _budget: &dyn up_data_structs::budget::Budget,159 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {160 fail!(<pallet_common::Error<T>>::UnsupportedOperation);161 }162163 fn delete_token_properties(164 &self,165 _sender: <T>::CrossAccountId,166 _token_id: TokenId,167 _property_keys: Vec<up_data_structs::PropertyKey>,168 _budget: &dyn up_data_structs::budget::Budget,169 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {170 fail!(<pallet_common::Error<T>>::UnsupportedOperation);171 }172173 fn set_token_property_permissions(174 &self,175 _sender: &<T>::CrossAccountId,176 _property_permissions: Vec<up_data_structs::PropertyKeyPermission>,177 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {178 fail!(<pallet_common::Error<T>>::UnsupportedOperation);179 }180181 fn transfer(182 &self,183 sender: <T>::CrossAccountId,184 to: <T>::CrossAccountId,185 _token: TokenId,186 amount: u128,187 budget: &dyn up_data_structs::budget::Budget,188 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {189 <Pallet<T>>::transfer(self, &sender, &to, amount, budget)190 }191192 fn approve(193 &self,194 _sender: <T>::CrossAccountId,195 _spender: <T>::CrossAccountId,196 _token: TokenId,197 _amount: u128,198 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {199 fail!(<pallet_common::Error<T>>::UnsupportedOperation);200 }201202 fn approve_from(203 &self,204 _sender: <T>::CrossAccountId,205 _from: <T>::CrossAccountId,206 _to: <T>::CrossAccountId,207 _token: TokenId,208 _amount: u128,209 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {210 fail!(<pallet_common::Error<T>>::UnsupportedOperation);211 }212213 fn transfer_from(214 &self,215 sender: <T>::CrossAccountId,216 from: <T>::CrossAccountId,217 to: <T>::CrossAccountId,218 _token: TokenId,219 amount: u128,220 budget: &dyn up_data_structs::budget::Budget,221 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {222 <Pallet<T>>::transfer_from(self, &sender, &from, &to, amount, budget)223 }224225 fn burn_from(226 &self,227 _sender: <T>::CrossAccountId,228 _from: <T>::CrossAccountId,229 _token: TokenId,230 _amount: u128,231 _budget: &dyn up_data_structs::budget::Budget,232 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {233 fail!(<pallet_common::Error<T>>::UnsupportedOperation);234 }235236 fn check_nesting(237 &self,238 _sender: <T>::CrossAccountId,239 _from: (up_data_structs::CollectionId, TokenId),240 _under: TokenId,241 _budget: &dyn up_data_structs::budget::Budget,242 ) -> frame_support::sp_runtime::DispatchResult {243 fail!(<pallet_common::Error<T>>::UnsupportedOperation);244 }245246 fn nest(&self, _under: TokenId, _to_nest: (up_data_structs::CollectionId, TokenId)) {}247248 fn unnest(&self, _under: TokenId, _to_nest: (up_data_structs::CollectionId, TokenId)) {}249250 fn account_tokens(&self, account: <T>::CrossAccountId) -> Vec<TokenId> {251 let balance = <T as Config>::Currency::total_balance(account.as_sub());252 if balance != 0 {253 vec![TokenId::default()]254 } else {255 vec![]256 }257 }258259 fn collection_tokens(&self) -> Vec<TokenId> {260 vec![TokenId::default()]261 }262263 fn token_exists(&self, token: TokenId) -> bool {264 token == TokenId::default()265 }266267 fn last_token_id(&self) -> TokenId {268 TokenId::default()269 }270271 fn token_owner(272 &self,273 _token: TokenId,274 ) -> Result<<T>::CrossAccountId, up_data_structs::TokenOwnerError> {275 Err(up_data_structs::TokenOwnerError::MultipleOwners)276 }277278 fn token_owners(&self, _token: TokenId) -> Vec<<T>::CrossAccountId> {279 vec![]280 }281282 fn token_property(283 &self,284 _token_id: TokenId,285 _key: &up_data_structs::PropertyKey,286 ) -> Option<up_data_structs::PropertyValue> {287 None288 }289290 fn token_properties(291 &self,292 _token: TokenId,293 _keys: Option<Vec<up_data_structs::PropertyKey>>,294 ) -> Vec<up_data_structs::Property> {295 vec![]296 }297298 fn total_supply(&self) -> u32 {299 1300 }301302 fn account_balance(&self, account: <T>::CrossAccountId) -> u32 {303 let balance: u128 = <T as Config>::Currency::free_balance(account.as_sub()).into();304 (balance != 0).into()305 }306307 fn balance(&self, account: <T>::CrossAccountId, token: TokenId) -> u128 {308 if token != TokenId::default() {309 return 0;310 }311 <T as Config>::Currency::free_balance(account.as_sub()).into()312 }313314 fn total_pieces(&self, token: TokenId) -> Option<u128> {315 if token != TokenId::default() {316 return None;317 }318 let total = <T as Config>::Currency::total_issuance();319 Some(total.into())320 }321322 fn allowance(323 &self,324 _sender: <T>::CrossAccountId,325 _spender: <T>::CrossAccountId,326 _token: TokenId,327 ) -> u128 {328 0329 }330331 fn refungible_extensions(&self) -> Option<&dyn pallet_common::RefungibleExtensions<T>> {332 None333 }334335 fn set_allowance_for_all(336 &self,337 _owner: <T>::CrossAccountId,338 _operator: <T>::CrossAccountId,339 _approve: bool,340 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {341 fail!(<pallet_common::Error<T>>::UnsupportedOperation);342 }343344 fn allowance_for_all(345 &self,346 _owner: <T>::CrossAccountId,347 _operator: <T>::CrossAccountId,348 ) -> bool {349 false350 }351352 fn repair_item(353 &self,354 _token: TokenId,355 ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {356 fail!(<pallet_common::Error<T>>::UnsupportedOperation);357 }358}