difftreelog
CArgo fmt
in: master
6 files changed
pallets/common/src/erc.rsdiffbeforeafterboth--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -14,7 +14,11 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-use evm_coder::{solidity_interface, types::*, execution::{Result, Error}};
+use evm_coder::{
+ solidity_interface,
+ types::*,
+ execution::{Result, Error},
+};
pub use pallet_evm::{PrecompileOutput, PrecompileResult, account::CrossAccountId};
use pallet_evm_coder_substrate::dispatch_to_evm;
use sp_core::{H160, U256};
@@ -66,11 +70,7 @@
Ok(prop.to_vec())
}
- fn eth_set_sponsor(
- &mut self,
- caller: caller,
- sponsor: address,
- ) -> Result<void> {
+ fn eth_set_sponsor(&mut self, caller: caller, sponsor: address) -> Result<void> {
check_is_owner(caller, self)?;
let sponsor = T::CrossAccountId::from_eth(sponsor);
@@ -88,44 +88,40 @@
Ok(())
}
- fn set_limit(
- &mut self,
- caller: caller,
- limit: string,
- value: string,
- ) -> Result<void> {
+ fn set_limit(&mut self, caller: caller, limit: string, value: string) -> Result<void> {
check_is_owner(caller, self)?;
let mut limits = self.limits.clone();
match limit.as_str() {
"accountTokenOwnershipLimit" => {
limits.account_token_ownership_limit = parse_int(value)?;
- },
+ }
"sponsoredDataSize" => {
limits.sponsored_data_size = parse_int(value)?;
- },
+ }
"sponsoredDataRateLimit" => {
- limits.sponsored_data_rate_limit = Some(SponsoringRateLimit::Blocks(parse_int(value)?.unwrap()));
- },
+ limits.sponsored_data_rate_limit =
+ Some(SponsoringRateLimit::Blocks(parse_int(value)?.unwrap()));
+ }
"tokenLimit" => {
limits.token_limit = parse_int(value)?;
- },
+ }
"sponsorTransferTimeout" => {
limits.sponsor_transfer_timeout = parse_int(value)?;
- },
+ }
"sponsorApproveTimeout" => {
limits.sponsor_approve_timeout = parse_int(value)?;
- },
+ }
"ownerCanTransfer" => {
limits.owner_can_transfer = parse_bool(value)?;
- },
+ }
"ownerCanDestroy" => {
limits.owner_can_destroy = parse_bool(value)?;
- },
+ }
"transfersEnabled" => {
limits.transfers_enabled = parse_bool(value)?;
- },
- _ => return Err(Error::Revert(format!("Unknown limit \"{}\"", limit)))
+ }
+ _ => return Err(Error::Revert(format!("Unknown limit \"{}\"", limit))),
}
self.limits = limits;
save(self);
@@ -150,13 +146,15 @@
}
fn parse_int(value: string) -> Result<Option<u32>> {
- value.parse::<u32>()
+ value
+ .parse::<u32>()
.map_err(|e| Error::Revert(format!("Int value \"{}\" parse error: {}", value, e)))
.map(|value| Some(value))
}
fn parse_bool(value: string) -> Result<Option<bool>> {
- value.parse::<bool>()
+ value
+ .parse::<bool>()
.map_err(|e| Error::Revert(format!("Bool value \"{}\" parse error: {}", value, e)))
.map(|value| Some(value))
-}
\ No newline at end of file
+}
pallets/evm-contract-helpers/src/eth.rsdiffbeforeafterboth--- a/pallets/evm-contract-helpers/src/eth.rs
+++ b/pallets/evm-contract-helpers/src/eth.rs
@@ -20,7 +20,7 @@
use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder};
use pallet_evm::{
ExitRevert, OnCreate, OnMethodCall, PrecompileResult, PrecompileFailure,
- account::CrossAccountId
+ account::CrossAccountId,
};
use sp_core::H160;
use crate::{
pallets/nonfungible/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};20use up_data_structs::{21 TokenId, CreateItemExData, CollectionId, budget::Budget, Property, PropertyKey,22 PropertyKeyPermission, PropertyValue,23};24use pallet_common::{25 CommonCollectionOperations, CommonWeightInfo, with_weight, weights::WeightInfo as _,26};27use sp_runtime::DispatchError;28use sp_std::vec::Vec;2930use crate::{31 AccountBalance, Allowance, Config, CreateItemData, Error, NonfungibleHandle, Owned, Pallet,32 SelfWeightOf, TokenData, weights::WeightInfo, TokensMinted,33};3435pub struct CommonWeights<T: Config>(PhantomData<T>);36impl<T: Config> CommonWeightInfo<T::CrossAccountId> for CommonWeights<T> {37 fn create_item() -> Weight {38 <SelfWeightOf<T>>::create_item()39 }4041 fn create_multiple_items_ex(data: &CreateItemExData<T::CrossAccountId>) -> Weight {42 match data {43 CreateItemExData::NFT(t) => {44 <SelfWeightOf<T>>::create_multiple_items_ex(t.len() as u32)45 + t.iter()46 .map(|t| {47 if t.properties.len() > 0 {48 Self::set_token_properties(t.properties.len() as u32)49 } else {50 051 }52 })53 .sum::<u64>()54 }55 _ => 0,56 }57 }5859 fn create_multiple_items(data: &[up_data_structs::CreateItemData]) -> Weight {60 <SelfWeightOf<T>>::create_multiple_items(data.len() as u32)61 + data62 .iter()63 .filter_map(|t| match t {64 up_data_structs::CreateItemData::NFT(n) if n.properties.len() > 0 => {65 Some(Self::set_token_properties(n.properties.len() as u32))66 }67 _ => None,68 })69 .sum::<u64>()70 }7172 fn burn_item() -> Weight {73 <SelfWeightOf<T>>::burn_item()74 }7576 fn set_collection_properties(amount: u32) -> Weight {77 <pallet_common::SelfWeightOf<T>>::set_collection_properties(amount)78 }7980 fn delete_collection_properties(amount: u32) -> Weight {81 <pallet_common::SelfWeightOf<T>>::delete_collection_properties(amount)82 }8384 fn set_token_properties(amount: u32) -> Weight {85 <SelfWeightOf<T>>::set_token_properties(amount)86 }8788 fn delete_token_properties(amount: u32) -> Weight {89 <SelfWeightOf<T>>::delete_token_properties(amount)90 }9192 fn set_property_permissions(amount: u32) -> Weight {93 <SelfWeightOf<T>>::set_property_permissions(amount)94 }9596 fn transfer() -> Weight {97 <SelfWeightOf<T>>::transfer()98 }99100 fn approve() -> Weight {101 <SelfWeightOf<T>>::approve()102 }103104 fn transfer_from() -> Weight {105 <SelfWeightOf<T>>::transfer_from()106 }107108 fn burn_from() -> Weight {109 <SelfWeightOf<T>>::burn_from()110 }111}112113fn map_create_data<T: Config>(114 data: up_data_structs::CreateItemData,115 to: &T::CrossAccountId,116) -> Result<CreateItemData<T>, DispatchError> {117 match data {118 up_data_structs::CreateItemData::NFT(data) => Ok(CreateItemData::<T> {119 properties: data.properties,120 owner: to.clone(),121 }),122 _ => fail!(<Error<T>>::NotNonfungibleDataUsedToMintFungibleCollectionToken),123 }124}125126impl<T: Config> CommonCollectionOperations<T> for NonfungibleHandle<T> {127 fn create_item(128 &self,129 sender: T::CrossAccountId,130 to: T::CrossAccountId,131 data: up_data_structs::CreateItemData,132 nesting_budget: &dyn Budget,133 ) -> DispatchResultWithPostInfo {134 with_weight(135 <Pallet<T>>::create_item(136 self,137 &sender,138 map_create_data::<T>(data, &to)?,139 nesting_budget,140 ),141 <CommonWeights<T>>::create_item(),142 )143 }144145 fn create_multiple_items(146 &self,147 sender: T::CrossAccountId,148 to: T::CrossAccountId,149 data: Vec<up_data_structs::CreateItemData>,150 nesting_budget: &dyn Budget,151 ) -> DispatchResultWithPostInfo {152 let weight = <CommonWeights<T>>::create_multiple_items(&data);153 let data = data154 .into_iter()155 .map(|d| map_create_data::<T>(d, &to))156 .collect::<Result<Vec<_>, DispatchError>>()?;157158 with_weight(159 <Pallet<T>>::create_multiple_items(self, &sender, data, nesting_budget),160 weight,161 )162 }163164 fn create_multiple_items_ex(165 &self,166 sender: <T>::CrossAccountId,167 data: up_data_structs::CreateItemExData<<T>::CrossAccountId>,168 nesting_budget: &dyn Budget,169 ) -> DispatchResultWithPostInfo {170 let weight = <CommonWeights<T>>::create_multiple_items_ex(&data);171 let data = match data {172 up_data_structs::CreateItemExData::NFT(nft) => nft,173 _ => fail!(Error::<T>::NotNonfungibleDataUsedToMintFungibleCollectionToken),174 };175176 with_weight(177 <Pallet<T>>::create_multiple_items(self, &sender, data.into_inner(), nesting_budget),178 weight,179 )180 }181182 fn set_collection_properties(183 &self,184 sender: T::CrossAccountId,185 properties: Vec<Property>,186 ) -> DispatchResultWithPostInfo {187 let weight = <CommonWeights<T>>::set_collection_properties(properties.len() as u32);188189 with_weight(190 <Pallet<T>>::set_collection_properties(self, &sender, properties),191 weight,192 )193 }194195 fn delete_collection_properties(196 &self,197 sender: &T::CrossAccountId,198 property_keys: Vec<PropertyKey>,199 ) -> DispatchResultWithPostInfo {200 let weight = <CommonWeights<T>>::delete_collection_properties(property_keys.len() as u32);201202 with_weight(203 <Pallet<T>>::delete_collection_properties(self, sender, property_keys),204 weight,205 )206 }207208 fn set_token_properties(209 &self,210 sender: T::CrossAccountId,211 token_id: TokenId,212 properties: Vec<Property>,213 ) -> DispatchResultWithPostInfo {214 let weight = <CommonWeights<T>>::set_token_properties(properties.len() as u32);215216 with_weight(217 <Pallet<T>>::set_token_properties(self, &sender, token_id, properties),218 weight,219 )220 }221222 fn delete_token_properties(223 &self,224 sender: T::CrossAccountId,225 token_id: TokenId,226 property_keys: Vec<PropertyKey>,227 ) -> DispatchResultWithPostInfo {228 let weight = <CommonWeights<T>>::delete_token_properties(property_keys.len() as u32);229230 with_weight(231 <Pallet<T>>::delete_token_properties(self, &sender, token_id, property_keys),232 weight,233 )234 }235236 fn set_property_permissions(237 &self,238 sender: &T::CrossAccountId,239 property_permissions: Vec<PropertyKeyPermission>,240 ) -> DispatchResultWithPostInfo {241 let weight =242 <CommonWeights<T>>::set_property_permissions(property_permissions.len() as u32);243244 with_weight(245 <Pallet<T>>::set_property_permissions(self, sender, property_permissions),246 weight,247 )248 }249250 fn burn_item(251 &self,252 sender: T::CrossAccountId,253 token: TokenId,254 amount: u128,255 ) -> DispatchResultWithPostInfo {256 ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);257 if amount == 1 {258 with_weight(259 <Pallet<T>>::burn(self, &sender, token),260 <CommonWeights<T>>::burn_item(),261 )262 } else {263 Ok(().into())264 }265 }266267 fn transfer(268 &self,269 from: T::CrossAccountId,270 to: T::CrossAccountId,271 token: TokenId,272 amount: u128,273 nesting_budget: &dyn Budget,274 ) -> DispatchResultWithPostInfo {275 ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);276 if amount == 1 {277 with_weight(278 <Pallet<T>>::transfer(self, &from, &to, token, nesting_budget),279 <CommonWeights<T>>::transfer(),280 )281 } else {282 Ok(().into())283 }284 }285286 fn approve(287 &self,288 sender: T::CrossAccountId,289 spender: T::CrossAccountId,290 token: TokenId,291 amount: u128,292 ) -> DispatchResultWithPostInfo {293 ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);294295 with_weight(296 if amount == 1 {297 <Pallet<T>>::set_allowance(self, &sender, token, Some(&spender))298 } else {299 <Pallet<T>>::set_allowance(self, &sender, token, None)300 },301 <CommonWeights<T>>::approve(),302 )303 }304305 fn transfer_from(306 &self,307 sender: T::CrossAccountId,308 from: T::CrossAccountId,309 to: T::CrossAccountId,310 token: TokenId,311 amount: u128,312 nesting_budget: &dyn Budget,313 ) -> DispatchResultWithPostInfo {314 ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);315316 if amount == 1 {317 with_weight(318 <Pallet<T>>::transfer_from(self, &sender, &from, &to, token, nesting_budget),319 <CommonWeights<T>>::transfer_from(),320 )321 } else {322 Ok(().into())323 }324 }325326 fn burn_from(327 &self,328 sender: T::CrossAccountId,329 from: T::CrossAccountId,330 token: TokenId,331 amount: u128,332 nesting_budget: &dyn Budget,333 ) -> DispatchResultWithPostInfo {334 ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);335336 if amount == 1 {337 with_weight(338 <Pallet<T>>::burn_from(self, &sender, &from, token, nesting_budget),339 <CommonWeights<T>>::burn_from(),340 )341 } else {342 Ok(().into())343 }344 }345346 fn check_nesting(347 &self,348 sender: T::CrossAccountId,349 from: (CollectionId, TokenId),350 under: TokenId,351 budget: &dyn Budget,352 ) -> sp_runtime::DispatchResult {353 <Pallet<T>>::check_nesting(self, sender, from, under, budget)354 }355356 fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {357 <Owned<T>>::iter_prefix((self.id, account))358 .map(|(id, _)| id)359 .collect()360 }361362 fn collection_tokens(&self) -> Vec<TokenId> {363 <TokenData<T>>::iter_prefix((self.id,))364 .map(|(id, _)| id)365 .collect()366 }367368 fn token_exists(&self, token: TokenId) -> bool {369 <Pallet<T>>::token_exists(self, token)370 }371372 fn last_token_id(&self) -> TokenId {373 TokenId(<TokensMinted<T>>::get(self.id))374 }375376 fn token_owner(&self, token: TokenId) -> Option<T::CrossAccountId> {377 <TokenData<T>>::get((self.id, token)).map(|t| t.owner)378 }379380 fn token_property(&self, token_id: TokenId, key: &PropertyKey) -> Option<PropertyValue> {381 <Pallet<T>>::token_properties((self.id, token_id))382 .get(key)383 .cloned()384 }385386 fn token_properties(&self, token_id: TokenId, keys: Option<Vec<PropertyKey>>) -> Vec<Property> {387 let properties = <Pallet<T>>::token_properties((self.id, token_id));388389 keys.map(|keys| {390 keys.into_iter()391 .filter_map(|key| {392 properties.get(&key).map(|value| Property {393 key,394 value: value.clone(),395 })396 })397 .collect()398 })399 .unwrap_or_else(|| {400 properties401 .into_iter()402 .map(|(key, value)| Property {403 key: key.clone(),404 value: value.clone(),405 })406 .collect()407 })408 }409410 fn total_supply(&self) -> u32 {411 <Pallet<T>>::total_supply(self)412 }413414 fn account_balance(&self, account: T::CrossAccountId) -> u32 {415 <AccountBalance<T>>::get((self.id, account))416 }417418 fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {419 if <TokenData<T>>::get((self.id, token))420 .map(|a| a.owner == account)421 .unwrap_or(false)422 {423 1424 } else {425 0426 }427 }428429 fn allowance(430 &self,431 sender: T::CrossAccountId,432 spender: T::CrossAccountId,433 token: TokenId,434 ) -> u128 {435 if <TokenData<T>>::get((self.id, token))436 .map(|a| a.owner != sender)437 .unwrap_or(true)438 {439 0440 } else if <Allowance<T>>::get((self.id, token)) == Some(spender) {441 1442 } else {443 0444 }445 }446}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};20use up_data_structs::{21 TokenId, CreateItemExData, CollectionId, budget::Budget, Property, PropertyKey,22 PropertyKeyPermission, PropertyValue,23};24use pallet_common::{25 CommonCollectionOperations, CommonWeightInfo, with_weight, weights::WeightInfo as _,26 PropertyKeyPermission,27};28use sp_runtime::DispatchError;29use sp_std::vec::Vec;3031use crate::{32 AccountBalance, Allowance, Config, CreateItemData, Error, NonfungibleHandle, Owned, Pallet,33 SelfWeightOf, TokenData, weights::WeightInfo, TokensMinted,34};3536pub struct CommonWeights<T: Config>(PhantomData<T>);37impl<T: Config> CommonWeightInfo<T::CrossAccountId> for CommonWeights<T> {38 fn create_item() -> Weight {39 <SelfWeightOf<T>>::create_item()40 }4142 fn create_multiple_items_ex(data: &CreateItemExData<T::CrossAccountId>) -> Weight {43 match data {44 CreateItemExData::NFT(t) => {45 <SelfWeightOf<T>>::create_multiple_items_ex(t.len() as u32)46 + t.iter()47 .map(|t| {48 if t.properties.len() > 0 {49 Self::set_token_properties(t.properties.len() as u32)50 } else {51 052 }53 })54 .sum::<u64>()55 }56 _ => 0,57 }58 }5960 fn create_multiple_items(data: &[up_data_structs::CreateItemData]) -> Weight {61 <SelfWeightOf<T>>::create_multiple_items(data.len() as u32)62 + data63 .iter()64 .filter_map(|t| match t {65 up_data_structs::CreateItemData::NFT(n) if n.properties.len() > 0 => {66 Some(Self::set_token_properties(n.properties.len() as u32))67 }68 _ => None,69 })70 .sum::<u64>()71 }7273 fn burn_item() -> Weight {74 <SelfWeightOf<T>>::burn_item()75 }7677 fn set_collection_properties(amount: u32) -> Weight {78 <pallet_common::SelfWeightOf<T>>::set_collection_properties(amount)79 }8081 fn delete_collection_properties(amount: u32) -> Weight {82 <pallet_common::SelfWeightOf<T>>::delete_collection_properties(amount)83 }8485 fn set_token_properties(amount: u32) -> Weight {86 <SelfWeightOf<T>>::set_token_properties(amount)87 }8889 fn delete_token_properties(amount: u32) -> Weight {90 <SelfWeightOf<T>>::delete_token_properties(amount)91 }9293 fn set_property_permissions(amount: u32) -> Weight {94 <SelfWeightOf<T>>::set_property_permissions(amount)95 }9697 fn transfer() -> Weight {98 <SelfWeightOf<T>>::transfer()99 }100101 fn approve() -> Weight {102 <SelfWeightOf<T>>::approve()103 }104105 fn transfer_from() -> Weight {106 <SelfWeightOf<T>>::transfer_from()107 }108109 fn burn_from() -> Weight {110 <SelfWeightOf<T>>::burn_from()111 }112}113114fn map_create_data<T: Config>(115 data: up_data_structs::CreateItemData,116 to: &T::CrossAccountId,117) -> Result<CreateItemData<T>, DispatchError> {118 match data {119 up_data_structs::CreateItemData::NFT(data) => Ok(CreateItemData::<T> {120 properties: data.properties,121 owner: to.clone(),122 }),123 _ => fail!(<Error<T>>::NotNonfungibleDataUsedToMintFungibleCollectionToken),124 }125}126127impl<T: Config> CommonCollectionOperations<T> for NonfungibleHandle<T> {128 fn create_item(129 &self,130 sender: T::CrossAccountId,131 to: T::CrossAccountId,132 data: up_data_structs::CreateItemData,133 nesting_budget: &dyn Budget,134 ) -> DispatchResultWithPostInfo {135 with_weight(136 <Pallet<T>>::create_item(137 self,138 &sender,139 map_create_data::<T>(data, &to)?,140 nesting_budget,141 ),142 <CommonWeights<T>>::create_item(),143 )144 }145146 fn create_multiple_items(147 &self,148 sender: T::CrossAccountId,149 to: T::CrossAccountId,150 data: Vec<up_data_structs::CreateItemData>,151 nesting_budget: &dyn Budget,152 ) -> DispatchResultWithPostInfo {153 let weight = <CommonWeights<T>>::create_multiple_items(&data);154 let data = data155 .into_iter()156 .map(|d| map_create_data::<T>(d, &to))157 .collect::<Result<Vec<_>, DispatchError>>()?;158159 with_weight(160 <Pallet<T>>::create_multiple_items(self, &sender, data, nesting_budget),161 weight,162 )163 }164165 fn create_multiple_items_ex(166 &self,167 sender: <T>::CrossAccountId,168 data: up_data_structs::CreateItemExData<<T>::CrossAccountId>,169 nesting_budget: &dyn Budget,170 ) -> DispatchResultWithPostInfo {171 let weight = <CommonWeights<T>>::create_multiple_items_ex(&data);172 let data = match data {173 up_data_structs::CreateItemExData::NFT(nft) => nft,174 _ => fail!(Error::<T>::NotNonfungibleDataUsedToMintFungibleCollectionToken),175 };176177 with_weight(178 <Pallet<T>>::create_multiple_items(self, &sender, data.into_inner(), nesting_budget),179 weight,180 )181 }182183 fn set_collection_properties(184 &self,185 sender: T::CrossAccountId,186 properties: Vec<Property>,187 ) -> DispatchResultWithPostInfo {188 let weight = <CommonWeights<T>>::set_collection_properties(properties.len() as u32);189190 with_weight(191 <Pallet<T>>::set_collection_properties(self, &sender, properties),192 weight,193 )194 }195196 fn delete_collection_properties(197 &self,198 sender: &T::CrossAccountId,199 property_keys: Vec<PropertyKey>,200 ) -> DispatchResultWithPostInfo {201 let weight = <CommonWeights<T>>::delete_collection_properties(property_keys.len() as u32);202203 with_weight(204 <Pallet<T>>::delete_collection_properties(self, sender, property_keys),205 weight,206 )207 }208209 fn set_token_properties(210 &self,211 sender: T::CrossAccountId,212 token_id: TokenId,213 properties: Vec<Property>,214 ) -> DispatchResultWithPostInfo {215 let weight = <CommonWeights<T>>::set_token_properties(properties.len() as u32);216217 with_weight(218 <Pallet<T>>::set_token_properties(self, &sender, token_id, properties),219 weight,220 )221 }222223 fn delete_token_properties(224 &self,225 sender: T::CrossAccountId,226 token_id: TokenId,227 property_keys: Vec<PropertyKey>,228 ) -> DispatchResultWithPostInfo {229 let weight = <CommonWeights<T>>::delete_token_properties(property_keys.len() as u32);230231 with_weight(232 <Pallet<T>>::delete_token_properties(self, &sender, token_id, property_keys),233 weight,234 )235 }236237 fn set_property_permissions(238 &self,239 sender: &T::CrossAccountId,240 property_permissions: Vec<PropertyKeyPermission>,241 ) -> DispatchResultWithPostInfo {242 let weight =243 <CommonWeights<T>>::set_property_permissions(property_permissions.len() as u32);244245 with_weight(246 <Pallet<T>>::set_property_permissions(self, sender, property_permissions),247 weight,248 )249 }250251 fn burn_item(252 &self,253 sender: T::CrossAccountId,254 token: TokenId,255 amount: u128,256 ) -> DispatchResultWithPostInfo {257 ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);258 if amount == 1 {259 with_weight(260 <Pallet<T>>::burn(self, &sender, token),261 <CommonWeights<T>>::burn_item(),262 )263 } else {264 Ok(().into())265 }266 }267268 fn transfer(269 &self,270 from: T::CrossAccountId,271 to: T::CrossAccountId,272 token: TokenId,273 amount: u128,274 nesting_budget: &dyn Budget,275 ) -> DispatchResultWithPostInfo {276 ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);277 if amount == 1 {278 with_weight(279 <Pallet<T>>::transfer(self, &from, &to, token, nesting_budget),280 <CommonWeights<T>>::transfer(),281 )282 } else {283 Ok(().into())284 }285 }286287 fn approve(288 &self,289 sender: T::CrossAccountId,290 spender: T::CrossAccountId,291 token: TokenId,292 amount: u128,293 ) -> DispatchResultWithPostInfo {294 ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);295296 with_weight(297 if amount == 1 {298 <Pallet<T>>::set_allowance(self, &sender, token, Some(&spender))299 } else {300 <Pallet<T>>::set_allowance(self, &sender, token, None)301 },302 <CommonWeights<T>>::approve(),303 )304 }305306 fn transfer_from(307 &self,308 sender: T::CrossAccountId,309 from: T::CrossAccountId,310 to: T::CrossAccountId,311 token: TokenId,312 amount: u128,313 nesting_budget: &dyn Budget,314 ) -> DispatchResultWithPostInfo {315 ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);316317 if amount == 1 {318 with_weight(319 <Pallet<T>>::transfer_from(self, &sender, &from, &to, token, nesting_budget),320 <CommonWeights<T>>::transfer_from(),321 )322 } else {323 Ok(().into())324 }325 }326327 fn burn_from(328 &self,329 sender: T::CrossAccountId,330 from: T::CrossAccountId,331 token: TokenId,332 amount: u128,333 nesting_budget: &dyn Budget,334 ) -> DispatchResultWithPostInfo {335 ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);336337 if amount == 1 {338 with_weight(339 <Pallet<T>>::burn_from(self, &sender, &from, token, nesting_budget),340 <CommonWeights<T>>::burn_from(),341 )342 } else {343 Ok(().into())344 }345 }346347 fn check_nesting(348 &self,349 sender: T::CrossAccountId,350 from: (CollectionId, TokenId),351 under: TokenId,352 budget: &dyn Budget,353 ) -> sp_runtime::DispatchResult {354 <Pallet<T>>::check_nesting(self, sender, from, under, budget)355 }356357 fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {358 <Owned<T>>::iter_prefix((self.id, account))359 .map(|(id, _)| id)360 .collect()361 }362363 fn collection_tokens(&self) -> Vec<TokenId> {364 <TokenData<T>>::iter_prefix((self.id,))365 .map(|(id, _)| id)366 .collect()367 }368369 fn token_exists(&self, token: TokenId) -> bool {370 <Pallet<T>>::token_exists(self, token)371 }372373 fn last_token_id(&self) -> TokenId {374 TokenId(<TokensMinted<T>>::get(self.id))375 }376377 fn token_owner(&self, token: TokenId) -> Option<T::CrossAccountId> {378 <TokenData<T>>::get((self.id, token)).map(|t| t.owner)379 }380381 fn token_property(&self, token_id: TokenId, key: &PropertyKey) -> Option<PropertyValue> {382 <Pallet<T>>::token_properties((self.id, token_id))383 .get(key)384 .cloned()385 }386387 fn token_properties(&self, token_id: TokenId, keys: Option<Vec<PropertyKey>>) -> Vec<Property> {388 let properties = <Pallet<T>>::token_properties((self.id, token_id));389390 keys.map(|keys| {391 keys.into_iter()392 .filter_map(|key| {393 properties.get(&key).map(|value| Property {394 key,395 value: value.clone(),396 })397 })398 .collect()399 })400 .unwrap_or_else(|| {401 properties402 .into_iter()403 .map(|(key, value)| Property {404 key: key.clone(),405 value: value.clone(),406 })407 .collect()408 })409 }410411 fn total_supply(&self) -> u32 {412 <Pallet<T>>::total_supply(self)413 }414415 fn account_balance(&self, account: T::CrossAccountId) -> u32 {416 <AccountBalance<T>>::get((self.id, account))417 }418419 fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {420 if <TokenData<T>>::get((self.id, token))421 .map(|a| a.owner == account)422 .unwrap_or(false)423 {424 1425 } else {426 0427 }428 }429430 fn allowance(431 &self,432 sender: T::CrossAccountId,433 spender: T::CrossAccountId,434 token: TokenId,435 ) -> u128 {436 if <TokenData<T>>::get((self.id, token))437 .map(|a| a.owner != sender)438 .unwrap_or(true)439 {440 0441 } else if <Allowance<T>>::get((self.id, token)) == Some(spender) {442 1443 } else {444 0445 }446 }447}pallets/nonfungible/src/erc.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -21,7 +21,10 @@
};
use evm_coder::{ToLog, execution::*, generate_stubgen, solidity, solidity_interface, types::*, weight};
use frame_support::BoundedVec;
-use up_data_structs::{TokenId, SchemaVersion, PropertyPermission, PropertyKeyPermission, Property, CollectionId, PropertyKey, CollectionPropertiesVec};
+use up_data_structs::{
+ TokenId, SchemaVersion, PropertyPermission, PropertyKeyPermission, Property, CollectionId,
+ PropertyKey, CollectionPropertiesVec,
+};
use pallet_evm_coder_substrate::dispatch_to_evm;
use sp_core::{H160, U256};
use sp_std::vec::Vec;
@@ -382,11 +385,15 @@
}
let mut properties = CollectionPropertiesVec::default();
- properties.try_push(Property{
- key,
- value: token_uri.into_bytes().try_into()
- .map_err(|_| "token uri is too long")?
- }).map_err(|e| Error::Revert(alloc::format!("Can't add property: {:?}", e)))?;
+ properties
+ .try_push(Property {
+ key,
+ value: token_uri
+ .into_bytes()
+ .try_into()
+ .map_err(|_| "token uri is too long")?,
+ })
+ .map_err(|e| Error::Revert(alloc::format!("Can't add property: {:?}", e)))?;
<Pallet<T>>::create_item(
self,
@@ -407,10 +414,14 @@
}
}
-fn get_token_permission<T: Config>(collection_id: CollectionId, key: &PropertyKey) -> Result<PropertyPermission> {
+fn get_token_permission<T: Config>(
+ collection_id: CollectionId,
+ key: &PropertyKey,
+) -> Result<PropertyPermission> {
let token_property_permissions = CollectionPropertyPermissions::<T>::try_get(collection_id)
.map_err(|_| Error::Revert("No permissions for collection".into()))?;
- let a = token_property_permissions.get(key)
+ let a = token_property_permissions
+ .get(key)
.map(|p| p.clone())
.ok_or_else(|| Error::Revert("No permission for tokenURI".into()))?;
Ok(a)
pallets/unique/src/eth/mod.rsdiffbeforeafterboth--- a/pallets/unique/src/eth/mod.rs
+++ b/pallets/unique/src/eth/mod.rs
@@ -83,11 +83,11 @@
collection_admin: true,
token_owner: false,
};
- let mut token_property_permissions = up_data_structs::CollectionPropertiesPermissionsVec::default();
- token_property_permissions.try_push(up_data_structs::PropertyKeyPermission{
- key,
- permission,
- }).map_err(|e| Error::Revert(format!("{:?}", e)))?;
+ let mut token_property_permissions =
+ up_data_structs::CollectionPropertiesPermissionsVec::default();
+ token_property_permissions
+ .try_push(up_data_structs::PropertyKeyPermission { key, permission })
+ .map_err(|e| Error::Revert(format!("{:?}", e)))?;
let data = CreateCollectionData {
name,
runtime/opal/src/lib.rsdiffbeforeafterboth--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -49,8 +49,8 @@
// A few exports that help ease life for downstream crates.
pub use pallet_balances::Call as BalancesCall;
pub use pallet_evm::{
- EnsureAddressTruncated, HashedAddressMapping, Runner, account::CrossAccountId as _, OnMethodCall,
- Account as EVMAccount, FeeCalculator, GasWeightMapping,
+ EnsureAddressTruncated, HashedAddressMapping, Runner, account::CrossAccountId as _,
+ OnMethodCall, Account as EVMAccount, FeeCalculator, GasWeightMapping,
};
pub use frame_support::{
construct_runtime, match_types,