difftreelog
fix add PropertyGuardData
in: master
3 files changed
pallets/nonfungible/src/erc.rsdiffbeforeafterboth373738use crate::{38use crate::{39 AccountBalance, Config, CreateItemData, NonfungibleHandle, Pallet, TokenData, TokensMinted,39 AccountBalance, Config, CreateItemData, NonfungibleHandle, Pallet, TokenData, TokensMinted,40 SelfWeightOf, weights::WeightInfo, TokenProperties, property_guard::PropertyGuard,40 SelfWeightOf, weights::WeightInfo, TokenProperties, property_guard::*,41};41};424243#[solidity_interface(name = "TokenProperties")]43#[solidity_interface(name = "TokenProperties")]83 let value = value.try_into().map_err(|_| "value too long")?;83 let value = value.try_into().map_err(|_| "value too long")?;848485 let is_token_create = false;85 let is_token_create = false;86 let budget = self86 let nesting_budget = self87 .recorder87 .recorder88 .weight_calls_budget(<StructureWeight<T>>::find_parent());88 .weight_calls_budget(<StructureWeight<T>>::find_parent());898990 let mut guard =90 let mut guard =91 PropertyGuard::new(&caller, self, TokenId(token_id), is_token_create, &budget);91 PropertyGuard::new(PropertyGuardData {92 sender: &caller,93 collection: self,94 token_id: TokenId(token_id),95 is_token_create,96 nesting_budget: &nesting_budget97 });929893 <Pallet<T>>::set_token_property(Property { key, value }, &mut guard)99 <Pallet<T>>::set_token_property(Property { key, value }, &mut guard)94 .map_err(dispatch_to_evm::<T>)100 .map_err(dispatch_to_evm::<T>)102 .map_err(|_| "key too long")?;108 .map_err(|_| "key too long")?;103109104 let is_token_create = false;110 let is_token_create = false;105 let budget = self111 let nesting_budget = self106 .recorder112 .recorder107 .weight_calls_budget(<StructureWeight<T>>::find_parent());113 .weight_calls_budget(<StructureWeight<T>>::find_parent());108114109 let mut guard =115 let mut guard =110 PropertyGuard::new(&caller, self, TokenId(token_id), is_token_create, &budget);116 PropertyGuard::new(PropertyGuardData {117 sender: &caller,118 collection: self,119 token_id: TokenId(token_id),120 is_token_create,121 nesting_budget: &nesting_budget122 });111123112 <Pallet<T>>::delete_token_property(key, &mut guard).map_err(dispatch_to_evm::<T>)124 <Pallet<T>>::delete_token_property(key, &mut guard).map_err(dispatch_to_evm::<T>)113 }125 }pallets/nonfungible/src/lib.rsdiffbeforeafterboth494 ) -> DispatchResult {494 ) -> DispatchResult {495 Self::check_token_change_permission(&property.key, guard)?;495 Self::check_token_change_permission(&property.key, guard)?;496496497 <TokenProperties<T>>::try_mutate((guard.collection.id, guard.token), |properties| {497 <TokenProperties<T>>::try_mutate((guard.collection.id, guard.token_id), |properties| {498 let property = property.clone();498 let property = property.clone();499 properties.try_set(property.key, property.value)499 properties.try_set(property.key, property.value)500 })500 })501 .map_err(<CommonError<T>>::from)?;501 .map_err(<CommonError<T>>::from)?;502502503 <PalletCommon<T>>::deposit_event(CommonEvent::TokenPropertySet(503 <PalletCommon<T>>::deposit_event(CommonEvent::TokenPropertySet(504 guard.collection.id,504 guard.collection.id,505 guard.token,505 guard.token_id,506 property.key,506 property.key,507 ));507 ));508508518 is_token_create: bool,518 is_token_create: bool,519 nesting_budget: &dyn Budget,519 nesting_budget: &dyn Budget,520 ) -> DispatchResult {520 ) -> DispatchResult {521 let mut guard = PropertyGuard::new(521 let mut guard = PropertyGuard::new(PropertyGuardData {522 sender,522 sender,523 collection,523 collection,524 token_id,524 token_id,525 is_token_create,525 is_token_create,526 nesting_budget,526 nesting_budget,527 );527 });528528529 for property in properties {529 for property in properties {530 Self::set_token_property(property, &mut guard)?;530 Self::set_token_property(property, &mut guard)?;539 ) -> DispatchResult {539 ) -> DispatchResult {540 Self::check_token_change_permission(&property_key, guard)?;540 Self::check_token_change_permission(&property_key, guard)?;541541542 <TokenProperties<T>>::try_mutate((guard.collection.id, guard.token), |properties| {542 <TokenProperties<T>>::try_mutate((guard.collection.id, guard.token_id), |properties| {543 properties.remove(&property_key)543 properties.remove(&property_key)544 })544 })545 .map_err(<CommonError<T>>::from)?;545 .map_err(<CommonError<T>>::from)?;546546547 <PalletCommon<T>>::deposit_event(CommonEvent::TokenPropertyDeleted(547 <PalletCommon<T>>::deposit_event(CommonEvent::TokenPropertyDeleted(548 guard.collection.id,548 guard.collection.id,549 guard.token,549 guard.token_id,550 property_key,550 property_key,551 ));551 ));552552562 .cloned()562 .cloned()563 .unwrap_or_else(PropertyPermission::none);563 .unwrap_or_else(PropertyPermission::none);564564565 let is_property_exists = TokenProperties::<T>::get((guard.collection.id, guard.token))565 let is_property_exists = TokenProperties::<T>::get((guard.collection.id, guard.token_id))566 .get(property_key)566 .get(property_key)567 .is_some();567 .is_some();568568606 ) -> DispatchResult {606 ) -> DispatchResult {607 let is_token_create = false;607 let is_token_create = false;608608609 let mut guard = PropertyGuard::new(609 let mut guard = PropertyGuard::new(PropertyGuardData {610 sender,610 sender,611 collection,611 collection,612 token_id,612 token_id,613 is_token_create,613 is_token_create,614 nesting_budget,614 nesting_budget,615 );615 });616616617 for key in property_keys {617 for key in property_keys {618 Self::delete_token_property(key, &mut guard)?;618 Self::delete_token_property(key, &mut guard)?;pallets/nonfungible/src/property_guard.rsdiffbeforeafterboth3pub struct PropertyGuard<'a, T: Config> {3pub struct PropertyGuard<'a, T: Config> {4 pub sender: &'a T::CrossAccountId,4 pub sender: &'a T::CrossAccountId,5 pub collection: &'a NonfungibleHandle<T>,5 pub collection: &'a NonfungibleHandle<T>,6 pub token: TokenId,6 pub token_id: TokenId,7 pub is_token_create: bool,7 pub is_token_create: bool,8 budget: &'a dyn Budget,8 nesting_budget: &'a dyn Budget,9910 collection_admin_result: Option<DispatchResult>,10 collection_admin_result: Option<DispatchResult>,11 token_owner_result: Option<DispatchResult>,11 token_owner_result: Option<DispatchResult>,12}12}1314pub struct PropertyGuardData<'a, T: Config> {15 pub sender: &'a T::CrossAccountId,16 pub collection: &'a NonfungibleHandle<T>,17 pub token_id: TokenId,18 pub is_token_create: bool,19 pub nesting_budget: &'a dyn Budget,20}132114impl<'a, T: Config> PropertyGuard<'a, T> {22impl<'a, T: Config> PropertyGuard<'a, T> {15 pub fn new(23 pub fn new(data: PropertyGuardData<'a, T>) -> Self {16 sender: &'a T::CrossAccountId,17 collection: &'a NonfungibleHandle<T>,18 token: TokenId,19 is_token_create: bool,20 budget: &'a dyn Budget,21 ) -> Self {22 Self {24 Self {23 sender,25 sender: data.sender,24 collection,26 collection: data.collection,25 token,27 token_id: data.token_id,26 is_token_create,28 is_token_create: data.is_token_create,27 budget,29 nesting_budget: data.nesting_budget,283029 collection_admin_result: None,31 collection_admin_result: None,30 token_owner_result: None,32 token_owner_result: None,42 let is_owned = <PalletStructure<T>>::check_indirectly_owned(44 let is_owned = <PalletStructure<T>>::check_indirectly_owned(43 self.sender.clone(),45 self.sender.clone(),44 self.collection.id,46 self.collection.id,45 self.token,47 self.token_id,46 None,48 None,47 self.budget,49 self.nesting_budget,48 )?;50 )?;495150 if is_owned {52 if is_owned {