difftreelog
fix revert set_allowance
in: master
8 files changed
pallets/common/src/lib.rsdiffbeforeafterboth--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -1298,7 +1298,6 @@
spender: T::CrossAccountId,
token: TokenId,
amount: u128,
- nesting_budget: &dyn Budget,
) -> DispatchResultWithPostInfo;
fn transfer_from(
&self,
pallets/fungible/src/common.rsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use core::marker::PhantomData;1819use frame_support::{dispatch::DispatchResultWithPostInfo, ensure, fail, weights::Weight, traits::Get};20use up_data_structs::{TokenId, CollectionId, CreateItemExData, budget::Budget, CreateItemData};21use pallet_common::{CommonCollectionOperations, CommonWeightInfo, with_weight};22use pallet_structure::Error as StructureError;23use sp_runtime::ArithmeticError;24use sp_std::{vec::Vec, vec};25use up_data_structs::{Property, PropertyKey, PropertyValue, PropertyKeyPermission};2627use crate::{28 Allowance, Balance, Config, Error, FungibleHandle, Pallet, SelfWeightOf, weights::WeightInfo,29};3031pub struct CommonWeights<T: Config>(PhantomData<T>);32impl<T: Config> CommonWeightInfo<T::CrossAccountId> for CommonWeights<T> {33 fn create_item() -> Weight {34 <SelfWeightOf<T>>::create_item()35 }3637 fn create_multiple_items(_data: &[CreateItemData]) -> Weight {38 // All items minted for the same user, so it works same as create_item39 Self::create_item()40 }4142 fn create_multiple_items_ex(data: &CreateItemExData<T::CrossAccountId>) -> Weight {43 match data {44 CreateItemExData::Fungible(f) => {45 <SelfWeightOf<T>>::create_multiple_items_ex(f.len() as u32)46 }47 _ => 0,48 }49 }5051 fn burn_item() -> Weight {52 <SelfWeightOf<T>>::burn_item()53 }5455 fn set_collection_properties(_amount: u32) -> Weight {56 // Error57 058 }5960 fn delete_collection_properties(_amount: u32) -> Weight {61 // Error62 063 }6465 fn set_token_properties(_amount: u32) -> Weight {66 // Error67 068 }6970 fn delete_token_properties(_amount: u32) -> Weight {71 // Error72 073 }7475 fn set_property_permissions(_amount: u32) -> Weight {76 // Error77 078 }7980 fn transfer() -> Weight {81 <SelfWeightOf<T>>::transfer()82 }8384 fn approve() -> Weight {85 <SelfWeightOf<T>>::approve()86 }8788 fn transfer_from() -> Weight {89 <SelfWeightOf<T>>::transfer_from()90 }9192 fn burn_from() -> Weight {93 <SelfWeightOf<T>>::burn_from()94 }9596 fn burn_recursively_self_raw() -> Weight {97 // Read to get total balance98 Self::burn_item() + T::DbWeight::get().reads(1)99 }100101 fn burn_recursively_breadth_raw(_amount: u32) -> Weight {102 // Fungible tokens can't have children103 0104 }105}106107impl<T: Config> CommonCollectionOperations<T> for FungibleHandle<T> {108 fn create_item(109 &self,110 sender: T::CrossAccountId,111 to: T::CrossAccountId,112 data: up_data_structs::CreateItemData,113 nesting_budget: &dyn Budget,114 ) -> DispatchResultWithPostInfo {115 match data {116 up_data_structs::CreateItemData::Fungible(data) => with_weight(117 <Pallet<T>>::create_item(self, &sender, (to, data.value), nesting_budget),118 <CommonWeights<T>>::create_item(),119 ),120 _ => fail!(<Error<T>>::NotFungibleDataUsedToMintFungibleCollectionToken),121 }122 }123124 fn create_multiple_items(125 &self,126 sender: T::CrossAccountId,127 to: T::CrossAccountId,128 data: Vec<up_data_structs::CreateItemData>,129 nesting_budget: &dyn Budget,130 ) -> DispatchResultWithPostInfo {131 let mut sum: u128 = 0;132 for data in data {133 match data {134 up_data_structs::CreateItemData::Fungible(data) => {135 sum = sum136 .checked_add(data.value)137 .ok_or(ArithmeticError::Overflow)?;138 }139 _ => fail!(<Error<T>>::NotFungibleDataUsedToMintFungibleCollectionToken),140 }141 }142143 with_weight(144 <Pallet<T>>::create_item(self, &sender, (to, sum), nesting_budget),145 <CommonWeights<T>>::create_item(),146 )147 }148149 fn create_multiple_items_ex(150 &self,151 sender: <T>::CrossAccountId,152 data: up_data_structs::CreateItemExData<<T>::CrossAccountId>,153 nesting_budget: &dyn Budget,154 ) -> DispatchResultWithPostInfo {155 let weight = <CommonWeights<T>>::create_multiple_items_ex(&data);156 let data = match data {157 up_data_structs::CreateItemExData::Fungible(f) => f,158 _ => fail!(<Error<T>>::NotFungibleDataUsedToMintFungibleCollectionToken),159 };160161 with_weight(162 <Pallet<T>>::create_multiple_items(self, &sender, data.into_inner(), nesting_budget),163 weight,164 )165 }166167 fn burn_item(168 &self,169 sender: T::CrossAccountId,170 token: TokenId,171 amount: u128,172 ) -> DispatchResultWithPostInfo {173 ensure!(174 token == TokenId::default(),175 <Error<T>>::FungibleItemsHaveNoId176 );177178 with_weight(179 <Pallet<T>>::burn(self, &sender, amount),180 <CommonWeights<T>>::burn_item(),181 )182 }183184 fn burn_item_recursively(185 &self,186 sender: T::CrossAccountId,187 token: TokenId,188 self_budget: &dyn Budget,189 _breadth_budget: &dyn Budget,190 ) -> DispatchResultWithPostInfo {191 // Should not happen?192 ensure!(193 token == TokenId::default(),194 <Error<T>>::FungibleItemsHaveNoId195 );196 ensure!(self_budget.consume(), <StructureError<T>>::DepthLimit,);197198 with_weight(199 <Pallet<T>>::burn(self, &sender, <Balance<T>>::get((self.id, &sender))),200 <CommonWeights<T>>::burn_recursively_self_raw(),201 )202 }203204 fn transfer(205 &self,206 from: T::CrossAccountId,207 to: T::CrossAccountId,208 token: TokenId,209 amount: u128,210 nesting_budget: &dyn Budget,211 ) -> DispatchResultWithPostInfo {212 ensure!(213 token == TokenId::default(),214 <Error<T>>::FungibleItemsHaveNoId215 );216217 with_weight(218 <Pallet<T>>::transfer(self, &from, &to, amount, nesting_budget),219 <CommonWeights<T>>::transfer(),220 )221 }222223 fn approve(224 &self,225 sender: T::CrossAccountId,226 spender: T::CrossAccountId,227 token: TokenId,228 amount: u128,229 _nesting_budget: &dyn Budget,230 ) -> DispatchResultWithPostInfo {231 ensure!(232 token == TokenId::default(),233 <Error<T>>::FungibleItemsHaveNoId234 );235236 with_weight(237 <Pallet<T>>::set_allowance(self, &sender, &spender, amount),238 <CommonWeights<T>>::approve(),239 )240 }241242 fn transfer_from(243 &self,244 sender: T::CrossAccountId,245 from: T::CrossAccountId,246 to: T::CrossAccountId,247 token: TokenId,248 amount: u128,249 nesting_budget: &dyn Budget,250 ) -> DispatchResultWithPostInfo {251 ensure!(252 token == TokenId::default(),253 <Error<T>>::FungibleItemsHaveNoId254 );255256 with_weight(257 <Pallet<T>>::transfer_from(self, &sender, &from, &to, amount, nesting_budget),258 <CommonWeights<T>>::transfer_from(),259 )260 }261262 fn burn_from(263 &self,264 sender: T::CrossAccountId,265 from: T::CrossAccountId,266 token: TokenId,267 amount: u128,268 nesting_budget: &dyn Budget,269 ) -> DispatchResultWithPostInfo {270 ensure!(271 token == TokenId::default(),272 <Error<T>>::FungibleItemsHaveNoId273 );274275 with_weight(276 <Pallet<T>>::burn_from(self, &sender, &from, amount, nesting_budget),277 <CommonWeights<T>>::burn_from(),278 )279 }280281 fn set_collection_properties(282 &self,283 _sender: T::CrossAccountId,284 _property: Vec<Property>,285 ) -> DispatchResultWithPostInfo {286 fail!(<Error<T>>::SettingPropertiesNotAllowed)287 }288289 fn delete_collection_properties(290 &self,291 _sender: &T::CrossAccountId,292 _property_keys: Vec<PropertyKey>,293 ) -> DispatchResultWithPostInfo {294 fail!(<Error<T>>::SettingPropertiesNotAllowed)295 }296297 fn set_token_properties(298 &self,299 _sender: T::CrossAccountId,300 _token_id: TokenId,301 _property: Vec<Property>,302 ) -> DispatchResultWithPostInfo {303 fail!(<Error<T>>::SettingPropertiesNotAllowed)304 }305306 fn set_property_permissions(307 &self,308 _sender: &T::CrossAccountId,309 _property_permissions: Vec<PropertyKeyPermission>,310 ) -> DispatchResultWithPostInfo {311 fail!(<Error<T>>::SettingPropertiesNotAllowed)312 }313314 fn delete_token_properties(315 &self,316 _sender: T::CrossAccountId,317 _token_id: TokenId,318 _property_keys: Vec<PropertyKey>,319 ) -> DispatchResultWithPostInfo {320 fail!(<Error<T>>::SettingPropertiesNotAllowed)321 }322323 fn check_nesting(324 &self,325 _sender: <T>::CrossAccountId,326 _from: (CollectionId, TokenId),327 _under: TokenId,328 _budget: &dyn Budget,329 ) -> sp_runtime::DispatchResult {330 fail!(<Error<T>>::FungibleDisallowsNesting)331 }332333 fn nest(&self, _under: TokenId, _to_nest: (CollectionId, TokenId)) {}334335 fn unnest(&self, _under: TokenId, _to_nest: (CollectionId, TokenId)) {}336337 fn collection_tokens(&self) -> Vec<TokenId> {338 vec![TokenId::default()]339 }340341 fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {342 if <Balance<T>>::get((self.id, account)) != 0 {343 vec![TokenId::default()]344 } else {345 vec![]346 }347 }348349 fn token_exists(&self, token: TokenId) -> bool {350 token == TokenId::default()351 }352353 fn last_token_id(&self) -> TokenId {354 TokenId::default()355 }356357 fn token_owner(&self, _token: TokenId) -> Option<T::CrossAccountId> {358 None359 }360361 fn token_property(&self, _token_id: TokenId, _key: &PropertyKey) -> Option<PropertyValue> {362 None363 }364365 fn token_properties(366 &self,367 _token_id: TokenId,368 _keys: Option<Vec<PropertyKey>>,369 ) -> Vec<Property> {370 Vec::new()371 }372373 fn total_supply(&self) -> u32 {374 1375 }376377 fn account_balance(&self, account: T::CrossAccountId) -> u32 {378 if <Balance<T>>::get((self.id, account)) != 0 {379 1380 } else {381 0382 }383 }384385 fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {386 if token != TokenId::default() {387 return 0;388 }389 <Balance<T>>::get((self.id, account))390 }391392 fn allowance(393 &self,394 sender: T::CrossAccountId,395 spender: T::CrossAccountId,396 token: TokenId,397 ) -> u128 {398 if token != TokenId::default() {399 return 0;400 }401 <Allowance<T>>::get((self.id, sender, spender))402 }403}1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use core::marker::PhantomData;1819use frame_support::{dispatch::DispatchResultWithPostInfo, ensure, fail, weights::Weight, traits::Get};20use up_data_structs::{TokenId, CollectionId, CreateItemExData, budget::Budget, CreateItemData};21use pallet_common::{CommonCollectionOperations, CommonWeightInfo, with_weight};22use pallet_structure::Error as StructureError;23use sp_runtime::ArithmeticError;24use sp_std::{vec::Vec, vec};25use up_data_structs::{Property, PropertyKey, PropertyValue, PropertyKeyPermission};2627use crate::{28 Allowance, Balance, Config, Error, FungibleHandle, Pallet, SelfWeightOf, weights::WeightInfo,29};3031pub struct CommonWeights<T: Config>(PhantomData<T>);32impl<T: Config> CommonWeightInfo<T::CrossAccountId> for CommonWeights<T> {33 fn create_item() -> Weight {34 <SelfWeightOf<T>>::create_item()35 }3637 fn create_multiple_items(_data: &[CreateItemData]) -> Weight {38 // All items minted for the same user, so it works same as create_item39 Self::create_item()40 }4142 fn create_multiple_items_ex(data: &CreateItemExData<T::CrossAccountId>) -> Weight {43 match data {44 CreateItemExData::Fungible(f) => {45 <SelfWeightOf<T>>::create_multiple_items_ex(f.len() as u32)46 }47 _ => 0,48 }49 }5051 fn burn_item() -> Weight {52 <SelfWeightOf<T>>::burn_item()53 }5455 fn set_collection_properties(_amount: u32) -> Weight {56 // Error57 058 }5960 fn delete_collection_properties(_amount: u32) -> Weight {61 // Error62 063 }6465 fn set_token_properties(_amount: u32) -> Weight {66 // Error67 068 }6970 fn delete_token_properties(_amount: u32) -> Weight {71 // Error72 073 }7475 fn set_property_permissions(_amount: u32) -> Weight {76 // Error77 078 }7980 fn transfer() -> Weight {81 <SelfWeightOf<T>>::transfer()82 }8384 fn approve() -> Weight {85 <SelfWeightOf<T>>::approve()86 }8788 fn transfer_from() -> Weight {89 <SelfWeightOf<T>>::transfer_from()90 }9192 fn burn_from() -> Weight {93 <SelfWeightOf<T>>::burn_from()94 }9596 fn burn_recursively_self_raw() -> Weight {97 // Read to get total balance98 Self::burn_item() + T::DbWeight::get().reads(1)99 }100101 fn burn_recursively_breadth_raw(_amount: u32) -> Weight {102 // Fungible tokens can't have children103 0104 }105}106107impl<T: Config> CommonCollectionOperations<T> for FungibleHandle<T> {108 fn create_item(109 &self,110 sender: T::CrossAccountId,111 to: T::CrossAccountId,112 data: up_data_structs::CreateItemData,113 nesting_budget: &dyn Budget,114 ) -> DispatchResultWithPostInfo {115 match data {116 up_data_structs::CreateItemData::Fungible(data) => with_weight(117 <Pallet<T>>::create_item(self, &sender, (to, data.value), nesting_budget),118 <CommonWeights<T>>::create_item(),119 ),120 _ => fail!(<Error<T>>::NotFungibleDataUsedToMintFungibleCollectionToken),121 }122 }123124 fn create_multiple_items(125 &self,126 sender: T::CrossAccountId,127 to: T::CrossAccountId,128 data: Vec<up_data_structs::CreateItemData>,129 nesting_budget: &dyn Budget,130 ) -> DispatchResultWithPostInfo {131 let mut sum: u128 = 0;132 for data in data {133 match data {134 up_data_structs::CreateItemData::Fungible(data) => {135 sum = sum136 .checked_add(data.value)137 .ok_or(ArithmeticError::Overflow)?;138 }139 _ => fail!(<Error<T>>::NotFungibleDataUsedToMintFungibleCollectionToken),140 }141 }142143 with_weight(144 <Pallet<T>>::create_item(self, &sender, (to, sum), nesting_budget),145 <CommonWeights<T>>::create_item(),146 )147 }148149 fn create_multiple_items_ex(150 &self,151 sender: <T>::CrossAccountId,152 data: up_data_structs::CreateItemExData<<T>::CrossAccountId>,153 nesting_budget: &dyn Budget,154 ) -> DispatchResultWithPostInfo {155 let weight = <CommonWeights<T>>::create_multiple_items_ex(&data);156 let data = match data {157 up_data_structs::CreateItemExData::Fungible(f) => f,158 _ => fail!(<Error<T>>::NotFungibleDataUsedToMintFungibleCollectionToken),159 };160161 with_weight(162 <Pallet<T>>::create_multiple_items(self, &sender, data.into_inner(), nesting_budget),163 weight,164 )165 }166167 fn burn_item(168 &self,169 sender: T::CrossAccountId,170 token: TokenId,171 amount: u128,172 ) -> DispatchResultWithPostInfo {173 ensure!(174 token == TokenId::default(),175 <Error<T>>::FungibleItemsHaveNoId176 );177178 with_weight(179 <Pallet<T>>::burn(self, &sender, amount),180 <CommonWeights<T>>::burn_item(),181 )182 }183184 fn burn_item_recursively(185 &self,186 sender: T::CrossAccountId,187 token: TokenId,188 self_budget: &dyn Budget,189 _breadth_budget: &dyn Budget,190 ) -> DispatchResultWithPostInfo {191 // Should not happen?192 ensure!(193 token == TokenId::default(),194 <Error<T>>::FungibleItemsHaveNoId195 );196 ensure!(self_budget.consume(), <StructureError<T>>::DepthLimit,);197198 with_weight(199 <Pallet<T>>::burn(self, &sender, <Balance<T>>::get((self.id, &sender))),200 <CommonWeights<T>>::burn_recursively_self_raw(),201 )202 }203204 fn transfer(205 &self,206 from: T::CrossAccountId,207 to: T::CrossAccountId,208 token: TokenId,209 amount: u128,210 nesting_budget: &dyn Budget,211 ) -> DispatchResultWithPostInfo {212 ensure!(213 token == TokenId::default(),214 <Error<T>>::FungibleItemsHaveNoId215 );216217 with_weight(218 <Pallet<T>>::transfer(self, &from, &to, amount, nesting_budget),219 <CommonWeights<T>>::transfer(),220 )221 }222223 fn approve(224 &self,225 sender: T::CrossAccountId,226 spender: T::CrossAccountId,227 token: TokenId,228 amount: u128,229 ) -> DispatchResultWithPostInfo {230 ensure!(231 token == TokenId::default(),232 <Error<T>>::FungibleItemsHaveNoId233 );234235 with_weight(236 <Pallet<T>>::set_allowance(self, &sender, &spender, amount),237 <CommonWeights<T>>::approve(),238 )239 }240241 fn transfer_from(242 &self,243 sender: T::CrossAccountId,244 from: T::CrossAccountId,245 to: T::CrossAccountId,246 token: TokenId,247 amount: u128,248 nesting_budget: &dyn Budget,249 ) -> DispatchResultWithPostInfo {250 ensure!(251 token == TokenId::default(),252 <Error<T>>::FungibleItemsHaveNoId253 );254255 with_weight(256 <Pallet<T>>::transfer_from(self, &sender, &from, &to, amount, nesting_budget),257 <CommonWeights<T>>::transfer_from(),258 )259 }260261 fn burn_from(262 &self,263 sender: T::CrossAccountId,264 from: T::CrossAccountId,265 token: TokenId,266 amount: u128,267 nesting_budget: &dyn Budget,268 ) -> DispatchResultWithPostInfo {269 ensure!(270 token == TokenId::default(),271 <Error<T>>::FungibleItemsHaveNoId272 );273274 with_weight(275 <Pallet<T>>::burn_from(self, &sender, &from, amount, nesting_budget),276 <CommonWeights<T>>::burn_from(),277 )278 }279280 fn set_collection_properties(281 &self,282 _sender: T::CrossAccountId,283 _property: Vec<Property>,284 ) -> DispatchResultWithPostInfo {285 fail!(<Error<T>>::SettingPropertiesNotAllowed)286 }287288 fn delete_collection_properties(289 &self,290 _sender: &T::CrossAccountId,291 _property_keys: Vec<PropertyKey>,292 ) -> DispatchResultWithPostInfo {293 fail!(<Error<T>>::SettingPropertiesNotAllowed)294 }295296 fn set_token_properties(297 &self,298 _sender: T::CrossAccountId,299 _token_id: TokenId,300 _property: Vec<Property>,301 ) -> DispatchResultWithPostInfo {302 fail!(<Error<T>>::SettingPropertiesNotAllowed)303 }304305 fn set_property_permissions(306 &self,307 _sender: &T::CrossAccountId,308 _property_permissions: Vec<PropertyKeyPermission>,309 ) -> DispatchResultWithPostInfo {310 fail!(<Error<T>>::SettingPropertiesNotAllowed)311 }312313 fn delete_token_properties(314 &self,315 _sender: T::CrossAccountId,316 _token_id: TokenId,317 _property_keys: Vec<PropertyKey>,318 ) -> DispatchResultWithPostInfo {319 fail!(<Error<T>>::SettingPropertiesNotAllowed)320 }321322 fn check_nesting(323 &self,324 _sender: <T>::CrossAccountId,325 _from: (CollectionId, TokenId),326 _under: TokenId,327 _budget: &dyn Budget,328 ) -> sp_runtime::DispatchResult {329 fail!(<Error<T>>::FungibleDisallowsNesting)330 }331332 fn nest(&self, _under: TokenId, _to_nest: (CollectionId, TokenId)) {}333334 fn unnest(&self, _under: TokenId, _to_nest: (CollectionId, TokenId)) {}335336 fn collection_tokens(&self) -> Vec<TokenId> {337 vec![TokenId::default()]338 }339340 fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {341 if <Balance<T>>::get((self.id, account)) != 0 {342 vec![TokenId::default()]343 } else {344 vec![]345 }346 }347348 fn token_exists(&self, token: TokenId) -> bool {349 token == TokenId::default()350 }351352 fn last_token_id(&self) -> TokenId {353 TokenId::default()354 }355356 fn token_owner(&self, _token: TokenId) -> Option<T::CrossAccountId> {357 None358 }359360 fn token_property(&self, _token_id: TokenId, _key: &PropertyKey) -> Option<PropertyValue> {361 None362 }363364 fn token_properties(365 &self,366 _token_id: TokenId,367 _keys: Option<Vec<PropertyKey>>,368 ) -> Vec<Property> {369 Vec::new()370 }371372 fn total_supply(&self) -> u32 {373 1374 }375376 fn account_balance(&self, account: T::CrossAccountId) -> u32 {377 if <Balance<T>>::get((self.id, account)) != 0 {378 1379 } else {380 0381 }382 }383384 fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {385 if token != TokenId::default() {386 return 0;387 }388 <Balance<T>>::get((self.id, account))389 }390391 fn allowance(392 &self,393 sender: T::CrossAccountId,394 spender: T::CrossAccountId,395 token: TokenId,396 ) -> u128 {397 if token != TokenId::default() {398 return 0;399 }400 <Allowance<T>>::get((self.id, sender, spender))401 }402}pallets/nonfungible/src/common.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -308,15 +308,14 @@
spender: T::CrossAccountId,
token: TokenId,
amount: u128,
- nesting_budget: &dyn Budget,
) -> DispatchResultWithPostInfo {
ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);
with_weight(
if amount == 1 {
- <Pallet<T>>::set_allowance(self, &sender, token, Some(&spender), nesting_budget)
+ <Pallet<T>>::set_allowance(self, &sender, token, Some(&spender))
} else {
- <Pallet<T>>::set_allowance(self, &sender, token, None, nesting_budget)
+ <Pallet<T>>::set_allowance(self, &sender, token, None)
},
<CommonWeights<T>>::approve(),
)
pallets/nonfungible/src/erc.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -269,11 +269,8 @@
let caller = T::CrossAccountId::from_eth(caller);
let approved = T::CrossAccountId::from_eth(approved);
let token = token_id.try_into()?;
- let budget = self
- .recorder
- .weight_calls_budget(<StructureWeight<T>>::find_parent());
- <Pallet<T>>::set_allowance(self, &caller, token, Some(&approved), &budget)
+ <Pallet<T>>::set_allowance(self, &caller, token, Some(&approved))
.map_err(dispatch_to_evm::<T>)?;
Ok(())
}
pallets/nonfungible/src/lib.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -878,7 +878,6 @@
sender: &T::CrossAccountId,
token: TokenId,
spender: Option<&T::CrossAccountId>,
- nesting_budget: &dyn Budget,
) -> DispatchResult {
if collection.permissions.access() == AccessMode::AllowList {
collection.check_allowlist(sender)?;
@@ -890,16 +889,10 @@
if let Some(spender) = spender {
<PalletCommon<T>>::ensure_correct_receiver(spender)?;
}
-
- let is_owned = <PalletStructure<T>>::check_indirectly_owned(
- sender.clone(),
- collection.id,
- token,
- None,
- nesting_budget
- )?;
- if !is_owned {
+ let token_data =
+ <TokenData<T>>::get((collection.id, token)).ok_or(<CommonError<T>>::TokenNotFound)?;
+ if &token_data.owner != sender {
ensure!(
collection.ignores_owned_amount(sender),
<CommonError<T>>::CantApproveMoreThanOwned
@@ -926,9 +919,6 @@
// `from`, `to` checked in [`transfer`]
collection.check_allowlist(spender)?;
}
- if <Allowance<T>>::get((collection.id, token)).as_ref() == Some(spender) {
- return Ok(());
- }
if let Some(source) = T::CrossTokenAddressMapping::address_to_token(from) {
// TODO: should collection owner be allowed to perform this transfer?
ensure!(
@@ -943,6 +933,9 @@
);
return Ok(());
}
+ if <Allowance<T>>::get((collection.id, token)).as_ref() == Some(spender) {
+ return Ok(());
+ }
ensure!(
collection.ignores_allowance(spender),
<CommonError<T>>::ApprovedValueTooLow
pallets/proxy-rmrk-core/src/lib.rsdiffbeforeafterboth--- a/pallets/proxy-rmrk-core/src/lib.rs
+++ b/pallets/proxy-rmrk-core/src/lib.rs
@@ -414,13 +414,14 @@
let is_approval_required = cross_sender != spender;
if is_approval_required {
- <PalletNft<T>>::set_allowance(
- &collection,
- &cross_sender,
- nft_id,
- Some(&spender),
- &budget
- ).map_err(Self::map_common_err_to_proxy)?;
+ // FIXME
+ // <PalletNft<T>>::set_allowance(
+ // &collection,
+ // &cross_sender,
+ // nft_id,
+ // Some(&spender),
+ // &budget
+ // ).map_err(Self::map_common_err_to_proxy)?;
return Ok(());
}
pallets/refungible/src/common.rsdiffbeforeafterboth--- a/pallets/refungible/src/common.rs
+++ b/pallets/refungible/src/common.rs
@@ -254,7 +254,6 @@
spender: T::CrossAccountId,
token: TokenId,
amount: u128,
- _nesting_budget: &dyn Budget,
) -> DispatchResultWithPostInfo {
with_weight(
<Pallet<T>>::set_allowance(self, &sender, &spender, token, amount),
pallets/unique/src/lib.rsdiffbeforeafterboth--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -815,9 +815,8 @@
#[transactional]
pub fn approve(origin, spender: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResultWithPostInfo {
let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
- let budget = budget::Value::new(NESTING_BUDGET);
- dispatch_call::<T, _>(collection_id, |d| d.approve(sender, spender, item_id, amount, &budget))
+ dispatch_call::<T, _>(collection_id, |d| d.approve(sender, spender, item_id, amount))
}
/// Change ownership of a NFT on behalf of the owner. See Approve method for additional information. After this method executes, the approval is removed so that the approved address will not be able to transfer this NFT again from this owner.