difftreelog
chore fix code review requests
in: master
36 files changed
client/rpc/src/lib.rsdiffbeforeafterboth--- a/client/rpc/src/lib.rs
+++ b/client/rpc/src/lib.rs
@@ -248,8 +248,8 @@
) -> Result<Option<String>>;
/// Get whether an operator is approved by a given owner.
- #[method(name = "unique_isApprovedForAll")]
- fn is_approved_for_all(
+ #[method(name = "unique_allowanceForAll")]
+ fn allowance_for_all(
&self,
collection: CollectionId,
owner: CrossAccountId,
@@ -579,7 +579,7 @@
pass_method!(effective_collection_limits(collection_id: CollectionId) -> Option<CollectionLimits>, unique_api);
pass_method!(total_pieces(collection_id: CollectionId, token_id: TokenId) -> Option<String> => |o| o.map(|number| number.to_string()) , unique_api);
pass_method!(token_owners(collection: CollectionId, token: TokenId) -> Vec<CrossAccountId>, unique_api);
- pass_method!(is_approved_for_all(collection: CollectionId, owner: CrossAccountId, operator: CrossAccountId) -> bool, unique_api);
+ pass_method!(allowance_for_all(collection: CollectionId, owner: CrossAccountId, operator: CrossAccountId) -> bool, unique_api);
}
impl<C, Block, BlockNumber, CrossAccountId, AccountId>
pallets/common/src/lib.rsdiffbeforeafterboth--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -1535,7 +1535,7 @@
fn token_owner() -> Weight;
/// The price of setting approval for all
- fn set_approval_for_all() -> Weight;
+ fn set_allowance_for_all() -> Weight;
}
/// Weight info extension trait for refungible pallet.
@@ -1844,11 +1844,11 @@
/// Get extension for RFT collection.
fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions<T>>;
- /// An operator is allowed to transfer all tokens of the sender on their behalf.
+ /// The `operator` is allowed to transfer all tokens of the `owner` on their behalf.
/// * `owner` - Token owner
/// * `operator` - Operator
/// * `approve` - Should operator status be granted or revoked?
- fn set_approval_for_all(
+ fn set_allowance_for_all(
&self,
owner: T::CrossAccountId,
operator: T::CrossAccountId,
@@ -1856,7 +1856,7 @@
) -> DispatchResultWithPostInfo;
/// Tells whether the given `owner` approves the `operator`.
- fn is_approved_for_all(&self, owner: T::CrossAccountId, operator: T::CrossAccountId) -> bool;
+ fn allowance_for_all(&self, owner: T::CrossAccountId, operator: T::CrossAccountId) -> bool;
}
/// Extension for RFT collection.
pallets/fungible/src/common.rsdiffbeforeafterboth--- a/pallets/fungible/src/common.rs
+++ b/pallets/fungible/src/common.rs
@@ -108,7 +108,7 @@
Weight::zero()
}
- fn set_approval_for_all() -> Weight {
+ fn set_allowance_for_all() -> Weight {
Weight::zero()
}
}
@@ -429,7 +429,7 @@
<TotalSupply<T>>::try_get(self.id).ok()
}
- fn set_approval_for_all(
+ fn set_allowance_for_all(
&self,
_owner: T::CrossAccountId,
_operator: T::CrossAccountId,
@@ -438,7 +438,7 @@
fail!(<Error<T>>::SettingApprovalForAllNotAllowed)
}
- fn is_approved_for_all(&self, _owner: T::CrossAccountId, _operator: T::CrossAccountId) -> bool {
+ fn allowance_for_all(&self, _owner: T::CrossAccountId, _operator: T::CrossAccountId) -> bool {
false
}
}
pallets/nonfungible/src/benchmarking.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/benchmarking.rs
+++ b/pallets/nonfungible/src/benchmarking.rs
@@ -223,17 +223,17 @@
}: {collection.token_owner(item)}
- set_approval_for_all {
+ set_allowance_for_all {
bench_init!{
owner: sub; collection: collection(owner);
operator: cross_from_sub(owner); owner: cross_sub;
};
- }: {<Pallet<T>>::set_approval_for_all(&collection, &owner, &operator, true)}
+ }: {<Pallet<T>>::set_allowance_for_all(&collection, &owner, &operator, true)}
- is_approved_for_all {
+ allowance_for_all {
bench_init!{
owner: sub; collection: collection(owner);
operator: cross_from_sub(owner); owner: cross_sub;
};
- }: {<Pallet<T>>::is_approved_for_all(&collection, &owner, &operator)}
+ }: {<Pallet<T>>::allowance_for_all(&collection, &owner, &operator)}
}
pallets/nonfungible/src/common.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -123,8 +123,8 @@
<SelfWeightOf<T>>::token_owner()
}
- fn set_approval_for_all() -> Weight {
- <SelfWeightOf<T>>::set_approval_for_all()
+ fn set_allowance_for_all() -> Weight {
+ <SelfWeightOf<T>>::set_allowance_for_all()
}
}
@@ -517,19 +517,19 @@
}
}
- fn set_approval_for_all(
+ fn set_allowance_for_all(
&self,
owner: T::CrossAccountId,
operator: T::CrossAccountId,
approve: bool,
) -> DispatchResultWithPostInfo {
with_weight(
- <Pallet<T>>::set_approval_for_all(self, &owner, &operator, approve),
- <CommonWeights<T>>::set_approval_for_all(),
+ <Pallet<T>>::set_allowance_for_all(self, &owner, &operator, approve),
+ <CommonWeights<T>>::set_allowance_for_all(),
)
}
- fn is_approved_for_all(&self, owner: T::CrossAccountId, operator: T::CrossAccountId) -> bool {
- <Pallet<T>>::is_approved_for_all(self, &owner, &operator)
+ fn allowance_for_all(&self, owner: T::CrossAccountId, operator: T::CrossAccountId) -> bool {
+ <Pallet<T>>::allowance_for_all(self, &owner, &operator)
}
}
pallets/nonfungible/src/erc.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -472,8 +472,8 @@
/// @notice Sets or unsets the approval of a given operator.
/// The `operator` is allowed to transfer all tokens of the `caller` on their behalf.
/// @param operator Operator
- /// @param approved Is operator enabled or disabled
- #[weight(<SelfWeightOf<T>>::set_approval_for_all())]
+ /// @param approved Should operator status be granted or revoked?
+ #[weight(<SelfWeightOf<T>>::set_allowance_for_all())]
fn set_approval_for_all(
&mut self,
caller: caller,
@@ -483,7 +483,7 @@
let caller = T::CrossAccountId::from_eth(caller);
let operator = T::CrossAccountId::from_eth(operator);
- <Pallet<T>>::set_approval_for_all(self, &caller, &operator, approved)
+ <Pallet<T>>::set_allowance_for_all(self, &caller, &operator, approved)
.map_err(dispatch_to_evm::<T>)?;
Ok(())
}
@@ -494,13 +494,13 @@
Err("not implemented".into())
}
- /// @notice Tells whether an operator is approved by a given owner.
- #[weight(<SelfWeightOf<T>>::is_approved_for_all())]
+ /// @notice Tells whether the given `owner` approves the `operator`.
+ #[weight(<SelfWeightOf<T>>::allowance_for_all())]
fn is_approved_for_all(&self, owner: address, operator: address) -> Result<bool> {
let owner = T::CrossAccountId::from_eth(owner);
let operator = T::CrossAccountId::from_eth(operator);
- Ok(<Pallet<T>>::is_approved_for_all(self, &owner, &operator))
+ Ok(<Pallet<T>>::allowance_for_all(self, &owner, &operator))
}
/// @notice Returns collection helper contract address
pallets/nonfungible/src/lib.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -274,7 +274,7 @@
/// Operator set by a wallet owner that could perform certain transactions on all tokens in the wallet.
#[pallet::storage]
- pub type WalletOperator<T: Config> = StorageNMap<
+ pub type CollectionAllowance<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
Key<Blake2_128Concat, T::CrossAccountId>,
@@ -450,7 +450,7 @@
<TokensBurnt<T>>::remove(id);
let _ = <Allowance<T>>::clear_prefix((id,), u32::MAX, None);
let _ = <AccountBalance<T>>::clear_prefix((id,), u32::MAX, None);
- let _ = <WalletOperator<T>>::clear_prefix((id,), u32::MAX, None);
+ let _ = <CollectionAllowance<T>>::clear_prefix((id,), u32::MAX, None);
Ok(())
}
@@ -1206,7 +1206,7 @@
if <Allowance<T>>::get((collection.id, token)).as_ref() == Some(spender) {
return Ok(());
}
- if <WalletOperator<T>>::get((collection.id, from, spender)) == Some(true) {
+ if <CollectionAllowance<T>>::get((collection.id, from, spender)) {
return Ok(());
}
ensure!(
@@ -1345,11 +1345,11 @@
/// Sets or unsets the approval of a given operator.
///
- /// An operator is allowed to transfer all token pieces of the sender on their behalf.
+ /// The `operator` is allowed to transfer all token pieces of the `owner` on their behalf.
/// - `owner`: Token owner
/// - `operator`: Operator
- /// - `approve`: Is operator enabled or disabled
- pub fn set_approval_for_all(
+ /// - `approve`: Should operator status be granted or revoked?
+ pub fn set_allowance_for_all(
collection: &NonfungibleHandle<T>,
owner: &T::CrossAccountId,
operator: &T::CrossAccountId,
@@ -1364,7 +1364,7 @@
// =========
- <WalletOperator<T>>::insert((collection.id, owner, operator), approve);
+ <CollectionAllowance<T>>::insert((collection.id, owner, operator), approve);
<PalletEvm<T>>::deposit_log(
ERC721Events::ApprovalForAll {
owner: *owner.as_eth(),
@@ -1382,12 +1382,12 @@
Ok(())
}
- /// Tells whether an operator is approved by a given owner.
- pub fn is_approved_for_all(
+ /// Tells whether the given `owner` approves the `operator`.
+ pub fn allowance_for_all(
collection: &NonfungibleHandle<T>,
owner: &T::CrossAccountId,
operator: &T::CrossAccountId,
) -> bool {
- <WalletOperator<T>>::get((collection.id, owner, operator)).unwrap_or(false)
+ <CollectionAllowance<T>>::get((collection.id, owner, operator))
}
}
pallets/nonfungible/src/stubs/UniqueNFT.rawdiffbeforeafterbothbinary blob — no preview
pallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth--- a/pallets/nonfungible/src/stubs/UniqueNFT.sol
+++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol
@@ -1021,9 +1021,9 @@
}
/// @notice Sets or unsets the approval of a given operator.
- /// An operator is allowed to transfer all tokens of the sender on their behalf.
+ /// The `operator` is allowed to transfer all tokens of the `caller` on their behalf.
/// @param operator Operator
- /// @param approved Is operator enabled or disabled
+ /// @param approved Should operator status be granted or revoked?
/// @dev EVM selector for this function is: 0xa22cb465,
/// or in textual repr: setApprovalForAll(address,bool)
function setApprovalForAll(address operator, bool approved) public {
@@ -1043,7 +1043,7 @@
return 0x0000000000000000000000000000000000000000;
}
- /// @notice Tells whether an operator is approved by a given owner.
+ /// @notice Tells whether the given `owner` approves the `operator`.
/// @dev EVM selector for this function is: 0xe985e9c5,
/// or in textual repr: isApprovedForAll(address,address)
function isApprovedForAll(address owner, address operator) public view returns (bool) {
pallets/nonfungible/src/weights.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/weights.rs
+++ b/pallets/nonfungible/src/weights.rs
@@ -48,8 +48,8 @@
fn set_token_properties(b: u32, ) -> Weight;
fn delete_token_properties(b: u32, ) -> Weight;
fn token_owner() -> Weight;
- fn set_approval_for_all() -> Weight;
- fn is_approved_for_all() -> Weight;
+ fn set_allowance_for_all() -> Weight;
+ fn allowance_for_all() -> Weight;
}
/// Weights for pallet_nonfungible using the Substrate node and recommended hardware.
@@ -199,12 +199,12 @@
.saturating_add(T::DbWeight::get().reads(1 as u64))
}
// Storage: Nonfungible WalletOperator (r:0 w:1)
- fn set_approval_for_all() -> Weight {
+ fn set_allowance_for_all() -> Weight {
Weight::from_ref_time(16_231_000 as u64)
.saturating_add(T::DbWeight::get().writes(1 as u64))
}
// Storage: Nonfungible WalletOperator (r:1 w:0)
- fn is_approved_for_all() -> Weight {
+ fn allowance_for_all() -> Weight {
Weight::from_ref_time(6_161_000 as u64)
.saturating_add(T::DbWeight::get().reads(1 as u64))
}
@@ -356,12 +356,12 @@
.saturating_add(RocksDbWeight::get().reads(1 as u64))
}
// Storage: Nonfungible WalletOperator (r:0 w:1)
- fn set_approval_for_all() -> Weight {
+ fn set_allowance_for_all() -> Weight {
Weight::from_ref_time(16_231_000 as u64)
.saturating_add(RocksDbWeight::get().writes(1 as u64))
}
// Storage: Nonfungible WalletOperator (r:1 w:0)
- fn is_approved_for_all() -> Weight {
+ fn allowance_for_all() -> Weight {
Weight::from_ref_time(6_161_000 as u64)
.saturating_add(RocksDbWeight::get().reads(1 as u64))
}
pallets/refungible/src/benchmarking.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 super::*;18use crate::{Pallet, Config, RefungibleHandle};1920use core::convert::TryInto;21use core::iter::IntoIterator;22use frame_benchmarking::{benchmarks, account};23use pallet_common::{24 bench_init,25 benchmarking::{create_collection_raw, property_key, property_value, create_data},26};27use sp_core::H160;28use sp_std::prelude::*;29use up_data_structs::{30 CollectionMode, MAX_ITEMS_PER_BATCH, MAX_PROPERTIES_PER_ITEM, CUSTOM_DATA_LIMIT,31 budget::Unlimited,32};3334const SEED: u32 = 1;3536fn create_max_item_data<CrossAccountId: Ord>(37 users: impl IntoIterator<Item = (CrossAccountId, u128)>,38) -> CreateItemData<CrossAccountId> {39 CreateItemData {40 users: users41 .into_iter()42 .collect::<BTreeMap<_, _>>()43 .try_into()44 .unwrap(),45 properties: Default::default(),46 }47}4849fn create_max_item<T: Config>(50 collection: &RefungibleHandle<T>,51 sender: &T::CrossAccountId,52 users: impl IntoIterator<Item = (T::CrossAccountId, u128)>,53) -> Result<TokenId, DispatchError> {54 let data: CreateItemData<T::CrossAccountId> = create_max_item_data(users);55 <Pallet<T>>::create_item(&collection, sender, data, &Unlimited)?;56 Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))57}5859fn create_collection<T: Config>(60 owner: T::CrossAccountId,61) -> Result<RefungibleHandle<T>, DispatchError> {62 create_collection_raw(63 owner,64 CollectionMode::ReFungible,65 |owner: T::CrossAccountId, data| {66 <Pallet<T>>::init_collection(owner.clone(), owner, data, Default::default())67 },68 RefungibleHandle::cast,69 )70}7172benchmarks! {73 create_item {74 bench_init!{75 owner: sub; collection: collection(owner);76 sender: cross_from_sub(owner); to: cross_sub;77 };78 }: {create_max_item(&collection, &sender, [(to.clone(), 200)])?}7980 create_multiple_items {81 let b in 0..MAX_ITEMS_PER_BATCH;82 bench_init!{83 owner: sub; collection: collection(owner);84 sender: cross_from_sub(owner); to: cross_sub;85 };86 let data = (0..b).map(|_| create_max_item_data([(to.clone(), 200)])).collect();87 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}8889 create_multiple_items_ex_multiple_items {90 let b in 0..MAX_ITEMS_PER_BATCH;91 bench_init!{92 owner: sub; collection: collection(owner);93 sender: cross_from_sub(owner);94 };95 let data = (0..b).map(|t| {96 bench_init!(to: cross_sub(t););97 create_max_item_data([(to, 200)])98 }).collect();99 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}100101 create_multiple_items_ex_multiple_owners {102 let b in 0..MAX_ITEMS_PER_BATCH;103 bench_init!{104 owner: sub; collection: collection(owner);105 sender: cross_from_sub(owner);106 };107 let data = vec![create_max_item_data((0..b).map(|u| {108 bench_init!(to: cross_sub(u););109 (to, 200)110 }))].try_into().unwrap();111 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}112113 // Other user left, token data is kept114 burn_item_partial {115 bench_init!{116 owner: sub; collection: collection(owner);117 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;118 };119 let item = create_max_item(&collection, &sender, [(burner.clone(), 200), (another_owner, 200)])?;120 }: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}121 // No users remaining, token is destroyed122 burn_item_fully {123 bench_init!{124 owner: sub; collection: collection(owner);125 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;126 };127 let item = create_max_item(&collection, &sender, [(burner.clone(), 200)])?;128 }: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}129130 transfer_normal {131 bench_init!{132 owner: sub; collection: collection(owner);133 sender: cross_from_sub(owner); receiver: cross_sub;134 };135 let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;136 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?}137 // Target account is created138 transfer_creating {139 bench_init!{140 owner: sub; collection: collection(owner);141 sender: cross_from_sub(owner); receiver: cross_sub;142 };143 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;144 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?}145 // Source account is destroyed146 transfer_removing {147 bench_init!{148 owner: sub; collection: collection(owner);149 sender: cross_from_sub(owner); receiver: cross_sub;150 };151 let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;152 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?}153 // Source account destroyed, target created154 transfer_creating_removing {155 bench_init!{156 owner: sub; collection: collection(owner);157 sender: cross_from_sub(owner); receiver: cross_sub;158 };159 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;160 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?}161162 approve {163 bench_init!{164 owner: sub; collection: collection(owner);165 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;166 };167 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;168 }: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?}169170 transfer_from_normal {171 bench_init!{172 owner: sub; collection: collection(owner);173 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;174 };175 let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;176 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;177 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100, &Unlimited)?}178 // Target account is created179 transfer_from_creating {180 bench_init!{181 owner: sub; collection: collection(owner);182 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;183 };184 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;185 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;186 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100, &Unlimited)?}187 // Source account is destroyed188 transfer_from_removing {189 bench_init!{190 owner: sub; collection: collection(owner);191 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;192 };193 let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;194 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;195 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200, &Unlimited)?}196 // Source account destroyed, target created197 transfer_from_creating_removing {198 bench_init!{199 owner: sub; collection: collection(owner);200 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;201 };202 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;203 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;204 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200, &Unlimited)?}205206 // Both source account and token is destroyed207 burn_from {208 bench_init!{209 owner: sub; collection: collection(owner);210 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;211 };212 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;213 <Pallet<T>>::set_allowance(&collection, &sender, &burner, item, 200)?;214 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, 200, &Unlimited)?}215216 set_token_property_permissions {217 let b in 0..MAX_PROPERTIES_PER_ITEM;218 bench_init!{219 owner: sub; collection: collection(owner);220 owner: cross_from_sub;221 };222 let perms = (0..b).map(|k| PropertyKeyPermission {223 key: property_key(k as usize),224 permission: PropertyPermission {225 mutable: false,226 collection_admin: false,227 token_owner: false,228 },229 }).collect::<Vec<_>>();230 }: {<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?}231232 set_token_properties {233 let b in 0..MAX_PROPERTIES_PER_ITEM;234 bench_init!{235 owner: sub; collection: collection(owner);236 owner: cross_from_sub;237 };238 let perms = (0..b).map(|k| PropertyKeyPermission {239 key: property_key(k as usize),240 permission: PropertyPermission {241 mutable: false,242 collection_admin: true,243 token_owner: true,244 },245 }).collect::<Vec<_>>();246 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;247 let props = (0..b).map(|k| Property {248 key: property_key(k as usize),249 value: property_value(),250 }).collect::<Vec<_>>();251 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;252 }: {<Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), false, &Unlimited)?}253254 delete_token_properties {255 let b in 0..MAX_PROPERTIES_PER_ITEM;256 bench_init!{257 owner: sub; collection: collection(owner);258 owner: cross_from_sub;259 };260 let perms = (0..b).map(|k| PropertyKeyPermission {261 key: property_key(k as usize),262 permission: PropertyPermission {263 mutable: true,264 collection_admin: true,265 token_owner: true,266 },267 }).collect::<Vec<_>>();268 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;269 let props = (0..b).map(|k| Property {270 key: property_key(k as usize),271 value: property_value(),272 }).collect::<Vec<_>>();273 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;274 <Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), false, &Unlimited)?;275 let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();276 }: {<Pallet<T>>::delete_token_properties(&collection, &owner, item, to_delete.into_iter(), &Unlimited)?}277278 repartition_item {279 bench_init!{280 owner: sub; collection: collection(owner);281 sender: cross_from_sub(owner); owner: cross_sub;282 };283 let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;284 }: {<Pallet<T>>::repartition(&collection, &owner, item, 200)?}285286 token_owner {287 bench_init!{288 owner: sub; collection: collection(owner);289 sender: cross_from_sub(owner); owner: cross_sub;290 };291 let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;292 }: {<Pallet<T>>::token_owner(collection.id, item)}293294 set_approval_for_all {295 bench_init!{296 owner: sub; collection: collection(owner);297 operator: cross_from_sub(owner); owner: cross_sub;298 };299 }: {<Pallet<T>>::set_approval_for_all(&collection, &owner, &operator, true)}300301 is_approved_for_all {302 bench_init!{303 owner: sub; collection: collection(owner);304 operator: cross_from_sub(owner); owner: cross_sub;305 };306 }: {<Pallet<T>>::is_approved_for_all(&collection, &owner, &operator)}307}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 super::*;18use crate::{Pallet, Config, RefungibleHandle};1920use core::convert::TryInto;21use core::iter::IntoIterator;22use frame_benchmarking::{benchmarks, account};23use pallet_common::{24 bench_init,25 benchmarking::{create_collection_raw, property_key, property_value, create_data},26};27use sp_core::H160;28use sp_std::prelude::*;29use up_data_structs::{30 CollectionMode, MAX_ITEMS_PER_BATCH, MAX_PROPERTIES_PER_ITEM, CUSTOM_DATA_LIMIT,31 budget::Unlimited,32};3334const SEED: u32 = 1;3536fn create_max_item_data<CrossAccountId: Ord>(37 users: impl IntoIterator<Item = (CrossAccountId, u128)>,38) -> CreateItemData<CrossAccountId> {39 CreateItemData {40 users: users41 .into_iter()42 .collect::<BTreeMap<_, _>>()43 .try_into()44 .unwrap(),45 properties: Default::default(),46 }47}4849fn create_max_item<T: Config>(50 collection: &RefungibleHandle<T>,51 sender: &T::CrossAccountId,52 users: impl IntoIterator<Item = (T::CrossAccountId, u128)>,53) -> Result<TokenId, DispatchError> {54 let data: CreateItemData<T::CrossAccountId> = create_max_item_data(users);55 <Pallet<T>>::create_item(&collection, sender, data, &Unlimited)?;56 Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))57}5859fn create_collection<T: Config>(60 owner: T::CrossAccountId,61) -> Result<RefungibleHandle<T>, DispatchError> {62 create_collection_raw(63 owner,64 CollectionMode::ReFungible,65 |owner: T::CrossAccountId, data| {66 <Pallet<T>>::init_collection(owner.clone(), owner, data, Default::default())67 },68 RefungibleHandle::cast,69 )70}7172benchmarks! {73 create_item {74 bench_init!{75 owner: sub; collection: collection(owner);76 sender: cross_from_sub(owner); to: cross_sub;77 };78 }: {create_max_item(&collection, &sender, [(to.clone(), 200)])?}7980 create_multiple_items {81 let b in 0..MAX_ITEMS_PER_BATCH;82 bench_init!{83 owner: sub; collection: collection(owner);84 sender: cross_from_sub(owner); to: cross_sub;85 };86 let data = (0..b).map(|_| create_max_item_data([(to.clone(), 200)])).collect();87 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}8889 create_multiple_items_ex_multiple_items {90 let b in 0..MAX_ITEMS_PER_BATCH;91 bench_init!{92 owner: sub; collection: collection(owner);93 sender: cross_from_sub(owner);94 };95 let data = (0..b).map(|t| {96 bench_init!(to: cross_sub(t););97 create_max_item_data([(to, 200)])98 }).collect();99 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}100101 create_multiple_items_ex_multiple_owners {102 let b in 0..MAX_ITEMS_PER_BATCH;103 bench_init!{104 owner: sub; collection: collection(owner);105 sender: cross_from_sub(owner);106 };107 let data = vec![create_max_item_data((0..b).map(|u| {108 bench_init!(to: cross_sub(u););109 (to, 200)110 }))].try_into().unwrap();111 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}112113 // Other user left, token data is kept114 burn_item_partial {115 bench_init!{116 owner: sub; collection: collection(owner);117 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;118 };119 let item = create_max_item(&collection, &sender, [(burner.clone(), 200), (another_owner, 200)])?;120 }: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}121 // No users remaining, token is destroyed122 burn_item_fully {123 bench_init!{124 owner: sub; collection: collection(owner);125 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;126 };127 let item = create_max_item(&collection, &sender, [(burner.clone(), 200)])?;128 }: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}129130 transfer_normal {131 bench_init!{132 owner: sub; collection: collection(owner);133 sender: cross_from_sub(owner); receiver: cross_sub;134 };135 let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;136 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?}137 // Target account is created138 transfer_creating {139 bench_init!{140 owner: sub; collection: collection(owner);141 sender: cross_from_sub(owner); receiver: cross_sub;142 };143 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;144 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?}145 // Source account is destroyed146 transfer_removing {147 bench_init!{148 owner: sub; collection: collection(owner);149 sender: cross_from_sub(owner); receiver: cross_sub;150 };151 let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;152 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?}153 // Source account destroyed, target created154 transfer_creating_removing {155 bench_init!{156 owner: sub; collection: collection(owner);157 sender: cross_from_sub(owner); receiver: cross_sub;158 };159 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;160 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?}161162 approve {163 bench_init!{164 owner: sub; collection: collection(owner);165 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;166 };167 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;168 }: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?}169170 transfer_from_normal {171 bench_init!{172 owner: sub; collection: collection(owner);173 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;174 };175 let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;176 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;177 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100, &Unlimited)?}178 // Target account is created179 transfer_from_creating {180 bench_init!{181 owner: sub; collection: collection(owner);182 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;183 };184 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;185 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;186 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100, &Unlimited)?}187 // Source account is destroyed188 transfer_from_removing {189 bench_init!{190 owner: sub; collection: collection(owner);191 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;192 };193 let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;194 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;195 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200, &Unlimited)?}196 // Source account destroyed, target created197 transfer_from_creating_removing {198 bench_init!{199 owner: sub; collection: collection(owner);200 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;201 };202 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;203 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;204 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200, &Unlimited)?}205206 // Both source account and token is destroyed207 burn_from {208 bench_init!{209 owner: sub; collection: collection(owner);210 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;211 };212 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;213 <Pallet<T>>::set_allowance(&collection, &sender, &burner, item, 200)?;214 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, 200, &Unlimited)?}215216 set_token_property_permissions {217 let b in 0..MAX_PROPERTIES_PER_ITEM;218 bench_init!{219 owner: sub; collection: collection(owner);220 owner: cross_from_sub;221 };222 let perms = (0..b).map(|k| PropertyKeyPermission {223 key: property_key(k as usize),224 permission: PropertyPermission {225 mutable: false,226 collection_admin: false,227 token_owner: false,228 },229 }).collect::<Vec<_>>();230 }: {<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?}231232 set_token_properties {233 let b in 0..MAX_PROPERTIES_PER_ITEM;234 bench_init!{235 owner: sub; collection: collection(owner);236 owner: cross_from_sub;237 };238 let perms = (0..b).map(|k| PropertyKeyPermission {239 key: property_key(k as usize),240 permission: PropertyPermission {241 mutable: false,242 collection_admin: true,243 token_owner: true,244 },245 }).collect::<Vec<_>>();246 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;247 let props = (0..b).map(|k| Property {248 key: property_key(k as usize),249 value: property_value(),250 }).collect::<Vec<_>>();251 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;252 }: {<Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), false, &Unlimited)?}253254 delete_token_properties {255 let b in 0..MAX_PROPERTIES_PER_ITEM;256 bench_init!{257 owner: sub; collection: collection(owner);258 owner: cross_from_sub;259 };260 let perms = (0..b).map(|k| PropertyKeyPermission {261 key: property_key(k as usize),262 permission: PropertyPermission {263 mutable: true,264 collection_admin: true,265 token_owner: true,266 },267 }).collect::<Vec<_>>();268 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;269 let props = (0..b).map(|k| Property {270 key: property_key(k as usize),271 value: property_value(),272 }).collect::<Vec<_>>();273 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;274 <Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), false, &Unlimited)?;275 let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();276 }: {<Pallet<T>>::delete_token_properties(&collection, &owner, item, to_delete.into_iter(), &Unlimited)?}277278 repartition_item {279 bench_init!{280 owner: sub; collection: collection(owner);281 sender: cross_from_sub(owner); owner: cross_sub;282 };283 let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;284 }: {<Pallet<T>>::repartition(&collection, &owner, item, 200)?}285286 token_owner {287 bench_init!{288 owner: sub; collection: collection(owner);289 sender: cross_from_sub(owner); owner: cross_sub;290 };291 let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;292 }: {<Pallet<T>>::token_owner(collection.id, item)}293294 set_allowance_for_all {295 bench_init!{296 owner: sub; collection: collection(owner);297 operator: cross_from_sub(owner); owner: cross_sub;298 };299 }: {<Pallet<T>>::set_allowance_for_all(&collection, &owner, &operator, true)}300301 allowance_for_all {302 bench_init!{303 owner: sub; collection: collection(owner);304 operator: cross_from_sub(owner); owner: cross_sub;305 };306 }: {<Pallet<T>>::allowance_for_all(&collection, &owner, &operator)}307}pallets/refungible/src/common.rsdiffbeforeafterboth--- a/pallets/refungible/src/common.rs
+++ b/pallets/refungible/src/common.rs
@@ -153,8 +153,8 @@
<SelfWeightOf<T>>::token_owner()
}
- fn set_approval_for_all() -> Weight {
- <SelfWeightOf<T>>::set_approval_for_all()
+ fn set_allowance_for_all() -> Weight {
+ <SelfWeightOf<T>>::set_allowance_for_all()
}
}
@@ -521,20 +521,20 @@
<Pallet<T>>::total_pieces(self.id, token)
}
- fn set_approval_for_all(
+ fn set_allowance_for_all(
&self,
owner: T::CrossAccountId,
operator: T::CrossAccountId,
approve: bool,
) -> DispatchResultWithPostInfo {
with_weight(
- <Pallet<T>>::set_approval_for_all(self, &owner, &operator, approve),
- <CommonWeights<T>>::set_approval_for_all(),
+ <Pallet<T>>::set_allowance_for_all(self, &owner, &operator, approve),
+ <CommonWeights<T>>::set_allowance_for_all(),
)
}
- fn is_approved_for_all(&self, owner: T::CrossAccountId, operator: T::CrossAccountId) -> bool {
- <Pallet<T>>::is_approved_for_all(self, &owner, &operator)
+ fn allowance_for_all(&self, owner: T::CrossAccountId, operator: T::CrossAccountId) -> bool {
+ <Pallet<T>>::allowance_for_all(self, &owner, &operator)
}
}
pallets/refungible/src/erc.rsdiffbeforeafterboth--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -462,10 +462,10 @@
}
/// @notice Sets or unsets the approval of a given operator.
- /// An operator is allowed to transfer all tokens of the sender on their behalf.
+ /// The `operator` is allowed to transfer all token pieces of the `caller` on their behalf.
/// @param operator Operator
- /// @param approved Is operator enabled or disabled
- #[weight(<SelfWeightOf<T>>::set_approval_for_all())]
+ /// @param approved Should operator status be granted or revoked?
+ #[weight(<SelfWeightOf<T>>::set_allowance_for_all())]
fn set_approval_for_all(
&mut self,
caller: caller,
@@ -475,7 +475,7 @@
let caller = T::CrossAccountId::from_eth(caller);
let operator = T::CrossAccountId::from_eth(operator);
- <Pallet<T>>::set_approval_for_all(self, &caller, &operator, approved)
+ <Pallet<T>>::set_allowance_for_all(self, &caller, &operator, approved)
.map_err(dispatch_to_evm::<T>)?;
Ok(())
}
@@ -486,13 +486,13 @@
Err("not implemented".into())
}
- /// @notice Tells whether an operator is approved by a given owner.
- #[weight(<SelfWeightOf<T>>::is_approved_for_all())]
+ /// @notice Tells whether the given `owner` approves the `operator`.
+ #[weight(<SelfWeightOf<T>>::allowance_for_all())]
fn is_approved_for_all(&self, owner: address, operator: address) -> Result<bool> {
let owner = T::CrossAccountId::from_eth(owner);
let operator = T::CrossAccountId::from_eth(operator);
- Ok(<Pallet<T>>::is_approved_for_all(self, &owner, &operator))
+ Ok(<Pallet<T>>::allowance_for_all(self, &owner, &operator))
}
/// @notice Returns collection helper contract address
pallets/refungible/src/lib.rsdiffbeforeafterboth--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -275,14 +275,14 @@
/// Operator set by a wallet owner that could perform certain transactions on all tokens in the wallet.
#[pallet::storage]
- pub type WalletOperator<T: Config> = StorageNMap<
+ pub type CollectionAllowance<T: Config> = StorageNMap<
Key = (
Key<Twox64Concat, CollectionId>,
Key<Blake2_128Concat, T::CrossAccountId>,
Key<Blake2_128Concat, T::CrossAccountId>,
),
Value = bool,
- QueryKind = OptionQuery,
+ QueryKind = ValueQuery,
>;
#[pallet::hooks]
@@ -1174,8 +1174,8 @@
let allowance =
<Allowance<T>>::get((collection.id, token, from, &spender)).checked_sub(amount);
- // Allowance if any would be reduced if spender is also wallet operator
- if <WalletOperator<T>>::get((collection.id, from, spender)) == Some(true) {
+ // Allowance (if any) would be reduced if spender is also wallet operator
+ if <CollectionAllowance<T>>::get((collection.id, from, spender)) {
return Ok(allowance);
}
@@ -1408,11 +1408,11 @@
/// Sets or unsets the approval of a given operator.
///
- /// An operator is allowed to transfer all tokens of the sender on their behalf.
+ /// The `operator` is allowed to transfer all token pieces of the `owner` on their behalf.
/// - `owner`: Token owner
/// - `operator`: Operator
- /// - `approve`: Is operator enabled or disabled
- pub fn set_approval_for_all(
+ /// - `approve`: Should operator status be granted or revoked?
+ pub fn set_allowance_for_all(
collection: &RefungibleHandle<T>,
owner: &T::CrossAccountId,
operator: &T::CrossAccountId,
@@ -1427,7 +1427,7 @@
// =========
- <WalletOperator<T>>::insert((collection.id, owner, operator), approve);
+ <CollectionAllowance<T>>::insert((collection.id, owner, operator), approve);
<PalletEvm<T>>::deposit_log(
ERC721Events::ApprovalForAll {
owner: *owner.as_eth(),
@@ -1445,12 +1445,12 @@
Ok(())
}
- /// Tells whether an operator is approved by a given owner.
- pub fn is_approved_for_all(
+ /// Tells whether the given `owner` approves the `operator`.
+ pub fn allowance_for_all(
collection: &RefungibleHandle<T>,
owner: &T::CrossAccountId,
operator: &T::CrossAccountId,
) -> bool {
- <WalletOperator<T>>::get((collection.id, owner, operator)).unwrap_or(false)
+ <CollectionAllowance<T>>::get((collection.id, owner, operator))
}
}
pallets/refungible/src/stubs/UniqueRefungible.rawdiffbeforeafterbothbinary blob — no preview
pallets/refungible/src/stubs/UniqueRefungible.soldiffbeforeafterboth--- a/pallets/refungible/src/stubs/UniqueRefungible.sol
+++ b/pallets/refungible/src/stubs/UniqueRefungible.sol
@@ -1018,9 +1018,9 @@
}
/// @notice Sets or unsets the approval of a given operator.
- /// An operator is allowed to transfer all tokens of the sender on their behalf.
+ /// The `operator` is allowed to transfer all token pieces of the `caller` on their behalf.
/// @param operator Operator
- /// @param approved Is operator enabled or disabled
+ /// @param approved Should operator status be granted or revoked?
/// @dev EVM selector for this function is: 0xa22cb465,
/// or in textual repr: setApprovalForAll(address,bool)
function setApprovalForAll(address operator, bool approved) public {
@@ -1040,7 +1040,7 @@
return 0x0000000000000000000000000000000000000000;
}
- /// @notice Tells whether an operator is approved by a given owner.
+ /// @notice Tells whether the given `owner` approves the `operator`.
/// @dev EVM selector for this function is: 0xe985e9c5,
/// or in textual repr: isApprovedForAll(address,address)
function isApprovedForAll(address owner, address operator) public view returns (bool) {
pallets/refungible/src/weights.rsdiffbeforeafterboth--- a/pallets/refungible/src/weights.rs
+++ b/pallets/refungible/src/weights.rs
@@ -55,8 +55,8 @@
fn delete_token_properties(b: u32, ) -> Weight;
fn repartition_item() -> Weight;
fn token_owner() -> Weight;
- fn set_approval_for_all() -> Weight;
- fn is_approved_for_all() -> Weight;
+ fn set_allowance_for_all() -> Weight;
+ fn allowance_for_all() -> Weight;
}
/// Weights for pallet_refungible using the Substrate node and recommended hardware.
@@ -263,12 +263,12 @@
.saturating_add(T::DbWeight::get().reads(2 as u64))
}
// Storage: Refungible WalletOperator (r:0 w:1)
- fn set_approval_for_all() -> Weight {
+ fn set_allowance_for_all() -> Weight {
Weight::from_ref_time(16_150_000 as u64)
.saturating_add(T::DbWeight::get().writes(1 as u64))
}
// Storage: Refungible WalletOperator (r:1 w:0)
- fn is_approved_for_all() -> Weight {
+ fn allowance_for_all() -> Weight {
Weight::from_ref_time(5_901_000 as u64)
.saturating_add(T::DbWeight::get().reads(1 as u64))
}
@@ -477,12 +477,12 @@
.saturating_add(RocksDbWeight::get().reads(2 as u64))
}
// Storage: Refungible WalletOperator (r:0 w:1)
- fn set_approval_for_all() -> Weight {
+ fn set_allowance_for_all() -> Weight {
Weight::from_ref_time(16_150_000 as u64)
.saturating_add(RocksDbWeight::get().writes(1 as u64))
}
// Storage: Refungible WalletOperator (r:1 w:0)
- fn is_approved_for_all() -> Weight {
+ fn allowance_for_all() -> Weight {
Weight::from_ref_time(5_901_000 as u64)
.saturating_add(RocksDbWeight::get().reads(1 as u64))
}
pallets/unique/src/eth/mod.rsdiffbeforeafterboth--- a/pallets/unique/src/eth/mod.rs
+++ b/pallets/unique/src/eth/mod.rs
@@ -36,7 +36,7 @@
use sp_std::vec;
use up_data_structs::{
CollectionDescription, CollectionMode, CollectionName, CollectionTokenPrefix,
- CreateCollectionData, CollectionId,
+ CreateCollectionData,
};
use crate::{weights::WeightInfo, Config, SelfWeightOf};
pallets/unique/src/lib.rsdiffbeforeafterboth--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -1129,15 +1129,15 @@
/// Sets or unsets the approval of a given operator.
///
- /// An operator is allowed to transfer all tokens of the sender on their behalf.
+ /// The `operator` is allowed to transfer all tokens of the `owner` on their behalf.
///
/// # Arguments
///
/// * `owner`: Token owner
/// * `operator`: Operator
- /// * `approve`: Is operator enabled or disabled
- #[weight = T::CommonWeightInfo::set_approval_for_all()]
- pub fn set_approval_for_all(
+ /// * `approve`: Should operator status be granted or revoked?
+ #[weight = T::CommonWeightInfo::set_allowance_for_all()]
+ pub fn set_allowance_for_all(
origin,
collection_id: CollectionId,
operator: T::CrossAccountId,
@@ -1145,7 +1145,7 @@
) -> DispatchResultWithPostInfo {
let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
dispatch_tx::<T, _>(collection_id, |d| {
- d.set_approval_for_all(sender, operator, approve)
+ d.set_allowance_for_all(sender, operator, approve)
})
}
}
primitives/rpc/src/lib.rsdiffbeforeafterboth--- a/primitives/rpc/src/lib.rs
+++ b/primitives/rpc/src/lib.rs
@@ -134,6 +134,6 @@
fn token_owners(collection: CollectionId, token: TokenId) -> Result<Vec<CrossAccountId>>;
/// Get whether an operator is approved by a given owner.
- fn is_approved_for_all(collection: CollectionId, owner: CrossAccountId, operator: CrossAccountId) -> Result<bool>;
+ fn allowance_for_all(collection: CollectionId, owner: CrossAccountId, operator: CrossAccountId) -> Result<bool>;
}
}
runtime/common/runtime_apis.rsdiffbeforeafterboth--- a/runtime/common/runtime_apis.rs
+++ b/runtime/common/runtime_apis.rs
@@ -188,8 +188,8 @@
dispatch_unique_runtime!(collection.total_pieces(token_id))
}
- fn is_approved_for_all(collection: CollectionId, owner: CrossAccountId, operator: CrossAccountId) -> Result<bool, DispatchError> {
- dispatch_unique_runtime!(collection.is_approved_for_all(owner, operator))
+ fn allowance_for_all(collection: CollectionId, owner: CrossAccountId, operator: CrossAccountId) -> Result<bool, DispatchError> {
+ dispatch_unique_runtime!(collection.allowance_for_all(owner, operator))
}
}
runtime/common/weights.rsdiffbeforeafterboth--- a/runtime/common/weights.rs
+++ b/runtime/common/weights.rs
@@ -121,8 +121,8 @@
max_weight_of!(token_owner())
}
- fn set_approval_for_all() -> Weight {
- max_weight_of!(set_approval_for_all())
+ fn set_allowance_for_all() -> Weight {
+ max_weight_of!(set_allowance_for_all())
}
}
tests/src/approve.test.tsdiffbeforeafterboth--- a/tests/src/approve.test.ts
+++ b/tests/src/approve.test.ts
@@ -617,26 +617,31 @@
itSub('[nft] Enable and disable approval', async ({helper}) => {
const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});
- const checkBeforeApproval = await helper.nft.isApprovedForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+
+ const checkBeforeApproval = await helper.nft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
expect(checkBeforeApproval).to.be.false;
- await helper.nft.setApprovalForAll(alice, collectionId, {Substrate: bob.address}, true);
- const checkAfterApproval = await helper.nft.isApprovedForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+
+ await helper.nft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, true);
+ const checkAfterApproval = await helper.nft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
expect(checkAfterApproval).to.be.true;
- await helper.nft.setApprovalForAll(alice, collectionId, {Substrate: bob.address}, false);
- const checkAfterDisapproval = await helper.nft.isApprovedForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+
+ await helper.nft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, false);
+ const checkAfterDisapproval = await helper.nft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
expect(checkAfterDisapproval).to.be.false;
});
itSub.ifWithPallets('[rft] Enable and disable approval', [Pallets.ReFungible], async ({helper}) => {
const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const checkBeforeApproval = await helper.rft.isApprovedForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+
+ const checkBeforeApproval = await helper.rft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
expect(checkBeforeApproval).to.be.false;
- await helper.rft.setApprovalForAll(alice, collectionId, {Substrate: bob.address}, true);
- const checkAfterApproval = await helper.rft.isApprovedForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+
+ await helper.rft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, true);
+ const checkAfterApproval = await helper.rft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
expect(checkAfterApproval).to.be.true;
- await helper.rft.setApprovalForAll(alice, collectionId, {Substrate: bob.address}, false);
- const checkAfterDisapproval = await helper.rft.isApprovedForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+
+ await helper.rft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, false);
+ const checkAfterDisapproval = await helper.rft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
expect(checkAfterDisapproval).to.be.false;
});
});
tests/src/eth/api/UniqueNFT.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -672,9 +672,9 @@
function approve(address approved, uint256 tokenId) external;
/// @notice Sets or unsets the approval of a given operator.
- /// An operator is allowed to transfer all tokens of the sender on their behalf.
+ /// The `operator` is allowed to transfer all tokens of the `caller` on their behalf.
/// @param operator Operator
- /// @param approved Is operator enabled or disabled
+ /// @param approved Should operator status be granted or revoked?
/// @dev EVM selector for this function is: 0xa22cb465,
/// or in textual repr: setApprovalForAll(address,bool)
function setApprovalForAll(address operator, bool approved) external;
@@ -684,7 +684,7 @@
/// or in textual repr: getApproved(uint256)
function getApproved(uint256 tokenId) external view returns (address);
- /// @notice Tells whether an operator is approved by a given owner.
+ /// @notice Tells whether the given `owner` approves the `operator`.
/// @dev EVM selector for this function is: 0xe985e9c5,
/// or in textual repr: isApprovedForAll(address,address)
function isApprovedForAll(address owner, address operator) external view returns (bool);
tests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -669,9 +669,9 @@
function approve(address approved, uint256 tokenId) external;
/// @notice Sets or unsets the approval of a given operator.
- /// An operator is allowed to transfer all tokens of the sender on their behalf.
+ /// The `operator` is allowed to transfer all token pieces of the `caller` on their behalf.
/// @param operator Operator
- /// @param approved Is operator enabled or disabled
+ /// @param approved Should operator status be granted or revoked?
/// @dev EVM selector for this function is: 0xa22cb465,
/// or in textual repr: setApprovalForAll(address,bool)
function setApprovalForAll(address operator, bool approved) external;
@@ -681,7 +681,7 @@
/// or in textual repr: getApproved(uint256)
function getApproved(uint256 tokenId) external view returns (address);
- /// @notice Tells whether an operator is approved by a given owner.
+ /// @notice Tells whether the given `owner` approves the `operator`.
/// @dev EVM selector for this function is: 0xe985e9c5,
/// or in textual repr: isApprovedForAll(address,address)
function isApprovedForAll(address owner, address operator) external view returns (bool);
tests/src/eth/nonFungible.test.tsdiffbeforeafterboth--- a/tests/src/eth/nonFungible.test.ts
+++ b/tests/src/eth/nonFungible.test.ts
@@ -935,48 +935,54 @@
let donor: IKeyringPair;
let minter: IKeyringPair;
let alice: IKeyringPair;
- let bob: IKeyringPair;
before(async function() {
await usingEthPlaygrounds(async (helper, privateKey) => {
donor = await privateKey({filename: __filename});
- [minter, alice, bob] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ [minter, alice] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
itEth('[negative] Cant perform burn without approval', async ({helper}) => {
const collection = await helper.nft.mintCollection(minter, {name: 'A', description: 'B', tokenPrefix: 'C'});
- const owner = bob;
+ const owner = await helper.eth.createAccountWithBalance(donor, 100n);
const spender = await helper.eth.createAccountWithBalance(donor, 100n);
- const token = await collection.mintToken(minter, {Substrate: owner.address});
+ const token = await collection.mintToken(minter, {Ethereum: owner});
const address = helper.ethAddress.fromCollectionId(collection.collectionId);
const contract = helper.ethNativeContract.collection(address, 'nft');
- {
- const ownerCross = helper.ethCrossAccount.fromKeyringPair(owner);
- await expect(contract.methods.burnFromCross(ownerCross, token.tokenId).send({from: spender})).to.be.rejected;
- }
+ const ownerCross = helper.ethCrossAccount.fromAddress(owner);
+ await expect(contract.methods.burnFromCross(ownerCross, token.tokenId).send({from: spender})).to.be.rejected;
+
+ await contract.methods.setApprovalForAll(spender, true).send({from: owner});
+ await contract.methods.setApprovalForAll(spender, false).send({from: owner});
+
+ await expect(contract.methods.burnFromCross(ownerCross, token.tokenId).send({from: spender})).to.be.rejected;
});
itEth('[negative] Cant perform transfer without approval', async ({helper}) => {
const collection = await helper.nft.mintCollection(minter, {name: 'A', description: 'B', tokenPrefix: 'C'});
- const owner = bob;
const receiver = alice;
+ const owner = await helper.eth.createAccountWithBalance(donor, 100n);
const spender = await helper.eth.createAccountWithBalance(donor, 100n);
- const token = await collection.mintToken(minter, {Substrate: owner.address});
+ const token = await collection.mintToken(minter, {Ethereum: owner});
const address = helper.ethAddress.fromCollectionId(collection.collectionId);
const contract = helper.ethNativeContract.collection(address, 'nft');
- {
- const ownerCross = helper.ethCrossAccount.fromKeyringPair(owner);
- const recieverCross = helper.ethCrossAccount.fromKeyringPair(receiver);
- await expect(contract.methods.transferFromCross(ownerCross, recieverCross, token.tokenId).send({from: spender})).to.be.rejected;
- }
+ const ownerCross = helper.ethCrossAccount.fromAddress(owner);
+ const recieverCross = helper.ethCrossAccount.fromKeyringPair(receiver);
+
+ await expect(contract.methods.transferFromCross(ownerCross, recieverCross, token.tokenId).send({from: spender})).to.be.rejected;
+
+ await contract.methods.setApprovalForAll(spender, true).send({from: owner});
+ await contract.methods.setApprovalForAll(spender, false).send({from: owner});
+
+ await expect(contract.methods.transferFromCross(ownerCross, recieverCross, token.tokenId).send({from: spender})).to.be.rejected;
});
});
tests/src/eth/reFungible.test.tsdiffbeforeafterboth--- a/tests/src/eth/reFungible.test.ts
+++ b/tests/src/eth/reFungible.test.ts
@@ -750,10 +750,14 @@
const address = helper.ethAddress.fromCollectionId(collection.collectionId);
const contract = helper.ethNativeContract.collection(address, 'rft');
- {
- const ownerCross = helper.ethCrossAccount.fromAddress(owner);
- await expect(contract.methods.burnFromCross(ownerCross, token.tokenId).send({from: spender})).to.be.rejected;
- }
+ const ownerCross = helper.ethCrossAccount.fromAddress(owner);
+
+ await expect(contract.methods.burnFromCross(ownerCross, token.tokenId).send({from: spender})).to.be.rejected;
+
+ await contract.methods.setApprovalForAll(spender, true).send({from: owner});
+ await contract.methods.setApprovalForAll(spender, false).send({from: owner});
+
+ await expect(contract.methods.burnFromCross(ownerCross, token.tokenId).send({from: spender})).to.be.rejected;
});
itEth('[negative] Cant perform transfer without approval', async ({helper}) => {
@@ -768,10 +772,14 @@
const address = helper.ethAddress.fromCollectionId(collection.collectionId);
const contract = helper.ethNativeContract.collection(address, 'rft');
- {
- const ownerCross = helper.ethCrossAccount.fromAddress(owner);
- const recieverCross = helper.ethCrossAccount.fromKeyringPair(receiver);
- await expect(contract.methods.transferFromCross(ownerCross, recieverCross, token.tokenId).send({from: spender})).to.be.rejected;
- }
+ const ownerCross = helper.ethCrossAccount.fromAddress(owner);
+ const recieverCross = helper.ethCrossAccount.fromKeyringPair(receiver);
+
+ await expect(contract.methods.transferFromCross(ownerCross, recieverCross, token.tokenId).send({from: spender})).to.be.rejected;
+
+ await contract.methods.setApprovalForAll(spender, true).send({from: owner});
+ await contract.methods.setApprovalForAll(spender, false).send({from: owner});
+
+ await expect(contract.methods.transferFromCross(ownerCross, recieverCross, token.tokenId).send({from: spender})).to.be.rejected;
});
});
tests/src/interfaces/augment-api-events.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-events.ts
+++ b/tests/src/interfaces/augment-api-events.ts
@@ -107,7 +107,7 @@
**/
Approved: AugmentedEvent<ApiType, [u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;
/**
- * Amount pieces of token owned by `sender` was approved for `spender`.
+ * A `sender` approves operations on all owned tokens for `spender`.
**/
ApprovedForAll: AugmentedEvent<ApiType, [u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, bool]>;
/**
tests/src/interfaces/augment-api-query.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-query.ts
+++ b/tests/src/interfaces/augment-api-query.ts
@@ -406,6 +406,10 @@
**/
allowance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array) => Observable<Option<PalletEvmAccountBasicCrossAccountIdRepr>>, [u32, u32]> & QueryableStorageEntry<ApiType, [u32, u32]>;
/**
+ * Operator set by a wallet owner that could perform certain transactions on all tokens in the wallet.
+ **/
+ collectionAllowance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg3: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<bool>, [u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr]>;
+ /**
* Used to enumerate tokens owned by account.
**/
owned: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg3: u32 | AnyNumber | Uint8Array) => Observable<bool>, [u32, PalletEvmAccountBasicCrossAccountIdRepr, u32]> & QueryableStorageEntry<ApiType, [u32, PalletEvmAccountBasicCrossAccountIdRepr, u32]>;
@@ -441,10 +445,6 @@
* Total amount of minted tokens in a collection.
**/
tokensMinted: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
- /**
- * Operator set by a wallet owner that could perform certain transactions on all tokens in the wallet.
- **/
- walletOperator: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg3: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<Option<bool>>, [u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr]>;
/**
* Generic query
**/
@@ -625,6 +625,10 @@
**/
balance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array, arg3: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<u128>, [u32, u32, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, u32, PalletEvmAccountBasicCrossAccountIdRepr]>;
/**
+ * Operator set by a wallet owner that could perform certain transactions on all tokens in the wallet.
+ **/
+ collectionAllowance: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg3: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<bool>, [u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr]>;
+ /**
* Used to enumerate tokens owned by account.
**/
owned: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg3: u32 | AnyNumber | Uint8Array) => Observable<bool>, [u32, PalletEvmAccountBasicCrossAccountIdRepr, u32]> & QueryableStorageEntry<ApiType, [u32, PalletEvmAccountBasicCrossAccountIdRepr, u32]>;
@@ -648,10 +652,6 @@
* Total amount of pieces for token
**/
totalSupply: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array) => Observable<u128>, [u32, u32]> & QueryableStorageEntry<ApiType, [u32, u32]>;
- /**
- * Operator set by a wallet owner that could perform certain transactions on all tokens in the wallet.
- **/
- walletOperator: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg3: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => Observable<Option<bool>>, [u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry<ApiType, [u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr]>;
/**
* Generic query
**/
tests/src/interfaces/augment-api-rpc.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-rpc.ts
+++ b/tests/src/interfaces/augment-api-rpc.ts
@@ -684,6 +684,10 @@
**/
allowance: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, sender: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, spender: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<u128>>;
/**
+ * Tells whether the given `owner` approves the `operator`.
+ **/
+ allowanceForAll: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, owner: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, operator: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<bool>>>;
+ /**
* Check if a user is allowed to operate within a collection
**/
allowed: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<bool>>;
@@ -719,10 +723,6 @@
* Get effective collection limits
**/
effectiveCollectionLimits: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<UpDataStructsCollectionLimits>>>;
- /**
- * Tells whether an operator is approved by a given owner.
- **/
- isApprovedForAll: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, owner: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, operator: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable<Option<bool>>>;
/**
* Get the last token ID created in a collection
**/
tests/src/interfaces/augment-api-tx.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-tx.ts
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -1547,15 +1547,15 @@
/**
* Sets or unsets the approval of a given operator.
*
- * An operator is allowed to transfer all tokens of the sender on their behalf.
+ * The `operator` is allowed to transfer all tokens of the `owner` on their behalf.
*
* # Arguments
*
* * `owner`: Token owner
* * `operator`: Operator
- * * `approve`: Is operator enabled or disabled
+ * * `approve`: Should operator status be granted or revoked?
**/
- setApprovalForAll: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, operator: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletEvmAccountBasicCrossAccountIdRepr, bool]>;
+ setAllowanceForAll: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, operator: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletEvmAccountBasicCrossAccountIdRepr, bool]>;
/**
* Set specific limits of a collection. Empty, or None fields mean chain default.
*
tests/src/interfaces/default/types.tsdiffbeforeafterboth--- a/tests/src/interfaces/default/types.ts
+++ b/tests/src/interfaces/default/types.ts
@@ -2312,13 +2312,13 @@
readonly tokenId: u32;
readonly amount: u128;
} & Struct;
- readonly isSetApprovalForAll: boolean;
- readonly asSetApprovalForAll: {
+ readonly isSetAllowanceForAll: boolean;
+ readonly asSetAllowanceForAll: {
readonly collectionId: u32;
readonly operator: PalletEvmAccountBasicCrossAccountIdRepr;
readonly approve: bool;
} & Struct;
- readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions' | 'Repartition' | 'SetApprovalForAll';
+ readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions' | 'Repartition' | 'SetAllowanceForAll';
}
/** @name PalletUniqueError */
tests/src/interfaces/lookup.tsdiffbeforeafterboth--- a/tests/src/interfaces/lookup.ts
+++ b/tests/src/interfaces/lookup.ts
@@ -2305,7 +2305,7 @@
tokenId: 'u32',
amount: 'u128',
},
- set_approval_for_all: {
+ set_allowance_for_all: {
collectionId: 'u32',
operator: 'PalletEvmAccountBasicCrossAccountIdRepr',
approve: 'bool'
tests/src/interfaces/types-lookup.tsdiffbeforeafterboth--- a/tests/src/interfaces/types-lookup.ts
+++ b/tests/src/interfaces/types-lookup.ts
@@ -2541,13 +2541,13 @@
readonly tokenId: u32;
readonly amount: u128;
} & Struct;
- readonly isSetApprovalForAll: boolean;
- readonly asSetApprovalForAll: {
+ readonly isSetAllowanceForAll: boolean;
+ readonly asSetAllowanceForAll: {
readonly collectionId: u32;
readonly operator: PalletEvmAccountBasicCrossAccountIdRepr;
readonly approve: bool;
} & Struct;
- readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions' | 'Repartition' | 'SetApprovalForAll';
+ readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions' | 'Repartition' | 'SetAllowanceForAll';
}
/** @name UpDataStructsCollectionMode (240) */
tests/src/interfaces/unique/definitions.tsdiffbeforeafterboth--- a/tests/src/interfaces/unique/definitions.ts
+++ b/tests/src/interfaces/unique/definitions.ts
@@ -175,8 +175,8 @@
[collectionParam, tokenParam],
'Option<u128>',
),
- isApprovedForAll: fun(
- 'Tells whether an operator is approved by a given owner.',
+ allowanceForAll: fun(
+ 'Tells whether the given `owner` approves the `operator`.',
[collectionParam, crossAccountParam('owner'), crossAccountParam('operator')],
'Option<bool>',
),
tests/src/util/playgrounds/unique.tsdiffbeforeafterboth--- a/tests/src/util/playgrounds/unique.ts
+++ b/tests/src/util/playgrounds/unique.ts
@@ -1415,26 +1415,26 @@
}
/**
- * Tells whether an operator is approved by a given owner.
+ * Tells whether the given `owner` approves the `operator`.
* @param collectionId ID of collection
* @param owner owner address
- * @param operator operator addrees
+ * @param operator operator addrees
* @returns true if operator is enabled
*/
- async isApprovedForAll(collectionId: number, owner: ICrossAccountId, operator: ICrossAccountId): Promise<boolean> {
- return (await this.helper.callRpc('api.rpc.unique.isApprovedForAll', [collectionId, owner, operator])).toJSON();
+ async allowanceForAll(collectionId: number, owner: ICrossAccountId, operator: ICrossAccountId): Promise<boolean> {
+ return (await this.helper.callRpc('api.rpc.unique.allowanceForAll', [collectionId, owner, operator])).toJSON();
}
/** Sets or unsets the approval of a given operator.
- * An operator is allowed to transfer all tokens of the sender on their behalf.
- * @param operator Operator
- * @param approved Is operator enabled or disabled
+ * The `operator` is allowed to transfer all tokens of the `caller` on their behalf.
+ * @param operator Operator
+ * @param approved Should operator status be granted or revoked?
* @returns ```true``` if extrinsic success, otherwise ```false```
*/
- async setApprovalForAll(signer: TSigner, collectionId: number, operator: ICrossAccountId, approved: boolean): Promise<boolean> {
+ async setAllowanceForAll(signer: TSigner, collectionId: number, operator: ICrossAccountId, approved: boolean): Promise<boolean> {
const result = await this.helper.executeExtrinsic(
signer,
- 'api.tx.unique.setApprovalForAll', [collectionId, operator, approved],
+ 'api.tx.unique.setAllowanceForAll', [collectionId, operator, approved],
true,
);
return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'ApprovedForAll');