git.delta.rocks / unique-network / refs/commits / 64965b2ec466

difftreelog

fix add PropertyGuardData

Daniel Shiposha2022-07-04parent: #7871a15.patch.diff
in: master

3 files changed

modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
3737
38use 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};
4242
43#[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")?;
8484
85 let is_token_create = false;85 let is_token_create = false;
86 let budget = self86 let nesting_budget = self
87 .recorder87 .recorder
88 .weight_calls_budget(<StructureWeight<T>>::find_parent());88 .weight_calls_budget(<StructureWeight<T>>::find_parent());
8989
90 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_budget
97 });
9298
93 <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")?;
103109
104 let is_token_create = false;110 let is_token_create = false;
105 let budget = self111 let nesting_budget = self
106 .recorder112 .recorder
107 .weight_calls_budget(<StructureWeight<T>>::find_parent());113 .weight_calls_budget(<StructureWeight<T>>::find_parent());
108114
109 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_budget
122 });
111123
112 <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 }
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
494 ) -> DispatchResult {494 ) -> DispatchResult {
495 Self::check_token_change_permission(&property.key, guard)?;495 Self::check_token_change_permission(&property.key, guard)?;
496496
497 <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)?;
502502
503 <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 ));
508508
518 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 });
528528
529 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)?;
541541
542 <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)?;
546546
547 <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 ));
552552
562 .cloned()562 .cloned()
563 .unwrap_or_else(PropertyPermission::none);563 .unwrap_or_else(PropertyPermission::none);
564564
565 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();
568568
606 ) -> DispatchResult {606 ) -> DispatchResult {
607 let is_token_create = false;607 let is_token_create = false;
608608
609 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 });
616616
617 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)?;
modifiedpallets/nonfungible/src/property_guard.rsdiffbeforeafterboth
3pub 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,
99
10 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}
13
14pub 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}
1321
14impl<'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,
2830
29 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 )?;
4951
50 if is_owned {52 if is_owned {