difftreelog
style fix formatting
in: master
4 files changed
client/rpc/src/lib.rsdiffbeforeafterboth--- a/client/rpc/src/lib.rs
+++ b/client/rpc/src/lib.rs
@@ -528,7 +528,7 @@
|r: sc_service::Result<
up_data_structs::TokenDataVersion1<CrossAccountId>,
sp_runtime::DispatchError,
- >| r.and_then(|value| Ok(value.into())),
+ >| r.map(|value| value.into()),
)
.or_else(|_| {
Ok(api
node/cli/src/chain_spec.rsdiffbeforeafterboth--- a/node/cli/src/chain_spec.rs
+++ b/node/cli/src/chain_spec.rs
@@ -297,7 +297,7 @@
default_runtime,
// Sudo account
get_account_id_from_seed::<sr25519::Public>("Alice"),
- vec![
+ [
(
get_account_id_from_seed::<sr25519::Public>("Alice"),
get_from_seed::<AuraId>("Alice"),
@@ -371,7 +371,7 @@
default_runtime,
// Sudo account
get_account_id_from_seed::<sr25519::Public>("Alice"),
- vec![
+ [
(
get_account_id_from_seed::<sr25519::Public>("Alice"),
get_from_seed::<AuraId>("Alice"),
runtime/common/config/pallets/mod.rsdiffbeforeafterboth--- a/runtime/common/config/pallets/mod.rs
+++ b/runtime/common/config/pallets/mod.rs
@@ -24,8 +24,7 @@
weights::CommonWeights,
RelayChainBlockNumberProvider,
},
- Runtime, RuntimeEvent, RuntimeCall, RUNTIME_NAME, TOKEN_SYMBOL, DECIMALS,
- Balances,
+ Runtime, RuntimeEvent, RuntimeCall, RUNTIME_NAME, TOKEN_SYMBOL, DECIMALS, Balances,
};
use frame_support::traits::{ConstU32, ConstU64, Currency};
use up_common::{
runtime/common/ethereum/sponsoring.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/>.1617//! Implements EVM sponsoring logic via TransactionValidityHack1819use core::{convert::TryInto, marker::PhantomData};20use evm_coder::{Call};21use pallet_common::{CollectionHandle, eth::map_eth_to_id};22use pallet_evm::account::CrossAccountId;23use pallet_evm_transaction_payment::CallContext;24use pallet_nonfungible::{25 Config as NonfungibleConfig, Pallet as NonfungiblePallet, NonfungibleHandle,26 erc::{27 UniqueNFTCall, ERC721UniqueExtensionsCall, ERC721UniqueMintableCall, ERC721Call,28 TokenPropertiesCall,29 },30};31use pallet_fungible::{32 Config as FungibleConfig,33 erc::{UniqueFungibleCall, ERC20Call},34};35use pallet_refungible::{36 Config as RefungibleConfig,37 erc::UniqueRefungibleCall,38 erc_token::{RefungibleTokenHandle, UniqueRefungibleTokenCall},39 RefungibleHandle,40};41use pallet_unique::Config as UniqueConfig;42use sp_std::prelude::*;43use up_data_structs::{44 CollectionMode, CreateItemData, CreateNftData, mapping::TokenAddressMapping, TokenId,45};46use up_sponsorship::SponsorshipHandler;47use crate::{Runtime, runtime_common::sponsoring::*};4849mod refungible;5051pub type EvmSponsorshipHandler = (52 UniqueEthSponsorshipHandler<Runtime>,53 pallet_evm_contract_helpers::HelpersContractSponsoring<Runtime>,54);5556pub struct UniqueEthSponsorshipHandler<T: UniqueConfig>(PhantomData<*const T>);57impl<T: UniqueConfig + FungibleConfig + NonfungibleConfig + RefungibleConfig>58 SponsorshipHandler<T::CrossAccountId, CallContext> for UniqueEthSponsorshipHandler<T>59where60 T::AccountId: From<[u8; 32]>,61{62 fn get_sponsor(63 who: &T::CrossAccountId,64 call_context: &CallContext,65 ) -> Option<T::CrossAccountId> {66 if let Some(collection_id) = map_eth_to_id(&call_context.contract_address) {67 let collection = <CollectionHandle<T>>::new(collection_id)?;68 let sponsor = collection.sponsorship.sponsor()?.clone();69 // let (method_id, mut reader) = AbiReader::new_call(&call_context.input).ok()?;70 Some(T::CrossAccountId::from_sub(match &collection.mode {71 CollectionMode::NFT => {72 let collection = NonfungibleHandle::cast(collection);73 let call = <UniqueNFTCall<T>>::parse_full(&call_context.input).ok()??;74 match call {75 UniqueNFTCall::TokenProperties(call) => match call {76 TokenPropertiesCall::SetProperty {77 token_id,78 key,79 value,80 ..81 } => {82 let token_id: TokenId = token_id.try_into().ok()?;83 withdraw_set_existing_token_property::<T>(84 &collection,85 who,86 &token_id,87 key.len() + value.len(),88 )89 .map(|()| sponsor)90 }91 TokenPropertiesCall::SetProperties {92 token_id,93 properties,94 ..95 } => {96 let token_id: TokenId = token_id.try_into().ok()?;97 let data_size = properties98 .into_iter()99 .map(|p| p.key().len() + p.value().len())100 .sum();101102 withdraw_set_existing_token_property::<T>(103 &collection,104 who,105 &token_id,106 data_size,107 )108 .map(|()| sponsor)109 }110 _ => None,111 },112 UniqueNFTCall::ERC721UniqueExtensions(call) => match call {113 ERC721UniqueExtensionsCall::Transfer { token_id, .. } => {114 let token_id: TokenId = token_id.try_into().ok()?;115 withdraw_transfer::<T>(&collection, who, &token_id)116 .map(|()| sponsor)117 }118 ERC721UniqueExtensionsCall::MintCross { properties, .. } => {119 withdraw_create_item::<T>(120 &collection,121 who,122 &CreateItemData::NFT(CreateNftData::default()),123 )?;124125 let token_id =126 <NonfungiblePallet<T>>::next_token_id(&collection).ok()?;127 let data_size: usize = properties128 .into_iter()129 .map(|p| p.key().len() + p.value().len())130 .sum();131132 withdraw_set_token_property::<T>(&collection, &token_id, data_size)133 .map(|()| sponsor)134 }135 _ => None,136 },137 UniqueNFTCall::ERC721UniqueMintable(138 ERC721UniqueMintableCall::Mint { .. }139 | ERC721UniqueMintableCall::MintCheckId { .. }140 | ERC721UniqueMintableCall::MintWithTokenUri { .. }141 | ERC721UniqueMintableCall::MintWithTokenUriCheckId { .. },142 ) => withdraw_create_item::<T>(143 &collection,144 who,145 &CreateItemData::NFT(CreateNftData::default()),146 )147 .map(|()| sponsor),148 UniqueNFTCall::ERC721(ERC721Call::TransferFrom {149 token_id, from, ..150 }) => {151 let token_id: TokenId = token_id.try_into().ok()?;152 let from = T::CrossAccountId::from_eth(from);153 withdraw_transfer::<T>(&collection, &from, &token_id).map(|()| sponsor)154 }155 UniqueNFTCall::ERC721(ERC721Call::Approve { token_id, .. }) => {156 let token_id: TokenId = token_id.try_into().ok()?;157 withdraw_approve::<T>(&collection, who.as_sub(), &token_id)158 .map(|()| sponsor)159 }160 _ => None,161 }162 }163 CollectionMode::ReFungible => {164 let call = <UniqueRefungibleCall<T>>::parse_full(&call_context.input).ok()??;165 refungible::call_sponsor(call, collection, who).map(|()| sponsor)166 }167 CollectionMode::Fungible(_) => {168 let call = <UniqueFungibleCall<T>>::parse_full(&call_context.input).ok()??;169 match call {170 UniqueFungibleCall::ERC20(ERC20Call::Transfer { .. }) => {171 withdraw_transfer::<T>(&collection, who, &TokenId::default())172 .map(|()| sponsor)173 }174 UniqueFungibleCall::ERC20(ERC20Call::TransferFrom { from, .. }) => {175 let from = T::CrossAccountId::from_eth(from);176 withdraw_transfer::<T>(&collection, &from, &TokenId::default())177 .map(|()| sponsor)178 }179 UniqueFungibleCall::ERC20(ERC20Call::Approve { .. }) => {180 withdraw_approve::<T>(&collection, who.as_sub(), &TokenId::default())181 .map(|()| sponsor)182 }183 _ => None,184 }185 }186 }?))187 } else {188 let (collection_id, token_id) =189 T::EvmTokenAddressMapping::address_to_token(&call_context.contract_address)?;190 let collection = <CollectionHandle<T>>::new(collection_id)?;191 if collection.mode != CollectionMode::ReFungible {192 return None;193 }194 let sponsor = collection.sponsorship.sponsor()?.clone();195 let rft_collection = RefungibleHandle::cast(collection);196 // Token existance isn't checked at this point and should be checked in `withdraw` method.197 let token = RefungibleTokenHandle(rft_collection, token_id);198199 let call = <UniqueRefungibleTokenCall<T>>::parse_full(&call_context.input).ok()??;200 Some(T::CrossAccountId::from_sub(201 refungible::token_call_sponsor(call, token, who).map(|()| sponsor)?,202 ))203 }204 }205}206207mod common {208 use super::*;209210 use pallet_common::erc::{CollectionCall};211212 pub fn collection_call_sponsor<T>(213 call: CollectionCall<T>,214 _collection: CollectionHandle<T>,215 _who: &T::CrossAccountId,216 ) -> Option<()>217 where218 T: UniqueConfig + FungibleConfig + NonfungibleConfig + RefungibleConfig,219 {220 use CollectionCall::*;221222 match call {223 // Readonly224 ERC165Call(_, _)225 | CollectionProperty { .. }226 | CollectionProperties { .. }227 | HasCollectionPendingSponsor228 | CollectionSponsor229 | ContractAddress230 | AllowlistedCross { .. }231 | IsOwnerOrAdminEth { .. }232 | IsOwnerOrAdminCross { .. }233 | CollectionOwner234 | CollectionAdmins235 | CollectionLimits236 | CollectionNesting237 | CollectionNestingRestrictedIds238 | CollectionNestingPermissions239 | UniqueCollectionType => None,240241 // Not sponsored242 AddToCollectionAllowList { .. }243 | AddToCollectionAllowListCross { .. }244 | RemoveFromCollectionAllowList { .. }245 | RemoveFromCollectionAllowListCross { .. }246 | AddCollectionAdminCross { .. }247 | RemoveCollectionAdminCross { .. }248 | AddCollectionAdmin { .. }249 | RemoveCollectionAdmin { .. }250 | SetNestingBool { .. }251 | SetNesting { .. }252 | SetNestingCollectionIds { .. }253 | SetCollectionAccess { .. }254 | SetCollectionMintMode { .. }255 | SetOwner { .. }256 | ChangeCollectionOwnerCross { .. }257 | SetCollectionProperty { .. }258 | SetCollectionProperties { .. }259 | DeleteCollectionProperty { .. }260 | DeleteCollectionProperties { .. }261 | SetCollectionSponsor { .. }262 | SetCollectionSponsorCross { .. }263 | SetCollectionLimit { .. }264 | ConfirmCollectionSponsorship265 | RemoveCollectionSponsor => None,266 }267 }268}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/>.1617//! Implements EVM sponsoring logic via TransactionValidityHack1819use core::{convert::TryInto, marker::PhantomData};20use evm_coder::{Call};21use pallet_common::{CollectionHandle, eth::map_eth_to_id};22use pallet_evm::account::CrossAccountId;23use pallet_evm_transaction_payment::CallContext;24use pallet_nonfungible::{25 Config as NonfungibleConfig, Pallet as NonfungiblePallet, NonfungibleHandle,26 erc::{27 UniqueNFTCall, ERC721UniqueExtensionsCall, ERC721UniqueMintableCall, ERC721Call,28 TokenPropertiesCall,29 },30};31use pallet_fungible::{32 Config as FungibleConfig,33 erc::{UniqueFungibleCall, ERC20Call},34};35use pallet_refungible::{36 Config as RefungibleConfig,37 erc::UniqueRefungibleCall,38 erc_token::{RefungibleTokenHandle, UniqueRefungibleTokenCall},39 RefungibleHandle,40};41use pallet_unique::Config as UniqueConfig;42use sp_std::prelude::*;43use up_data_structs::{44 CollectionMode, CreateItemData, CreateNftData, mapping::TokenAddressMapping, TokenId,45};46use up_sponsorship::SponsorshipHandler;47use crate::{Runtime, runtime_common::sponsoring::*};4849mod refungible;5051pub type EvmSponsorshipHandler = (52 UniqueEthSponsorshipHandler<Runtime>,53 pallet_evm_contract_helpers::HelpersContractSponsoring<Runtime>,54);5556pub struct UniqueEthSponsorshipHandler<T: UniqueConfig>(PhantomData<*const T>);57impl<T: UniqueConfig + FungibleConfig + NonfungibleConfig + RefungibleConfig>58 SponsorshipHandler<T::CrossAccountId, CallContext> for UniqueEthSponsorshipHandler<T>59where60 T::AccountId: From<[u8; 32]>,61{62 fn get_sponsor(63 who: &T::CrossAccountId,64 call_context: &CallContext,65 ) -> Option<T::CrossAccountId> {66 if let Some(collection_id) = map_eth_to_id(&call_context.contract_address) {67 let collection = <CollectionHandle<T>>::new(collection_id)?;68 let sponsor = collection.sponsorship.sponsor()?.clone();69 // let (method_id, mut reader) = AbiReader::new_call(&call_context.input).ok()?;70 Some(T::CrossAccountId::from_sub(match &collection.mode {71 CollectionMode::NFT => {72 let collection = NonfungibleHandle::cast(collection);73 let call = <UniqueNFTCall<T>>::parse_full(&call_context.input).ok()??;74 match call {75 UniqueNFTCall::TokenProperties(call) => match call {76 TokenPropertiesCall::SetProperty {77 token_id,78 key,79 value,80 ..81 } => {82 let token_id: TokenId = token_id.try_into().ok()?;83 withdraw_set_existing_token_property::<T>(84 &collection,85 who,86 &token_id,87 key.len() + value.len(),88 )89 .map(|()| sponsor)90 }91 TokenPropertiesCall::SetProperties {92 token_id,93 properties,94 ..95 } => {96 let token_id: TokenId = token_id.try_into().ok()?;97 let data_size = properties98 .into_iter()99 .map(|p| p.key().len() + p.value().len())100 .sum();101102 withdraw_set_existing_token_property::<T>(103 &collection,104 who,105 &token_id,106 data_size,107 )108 .map(|()| sponsor)109 }110 _ => None,111 },112 UniqueNFTCall::ERC721UniqueExtensions(call) => match call {113 ERC721UniqueExtensionsCall::Transfer { token_id, .. } => {114 let token_id: TokenId = token_id.try_into().ok()?;115 withdraw_transfer::<T>(&collection, who, &token_id)116 .map(|()| sponsor)117 }118 ERC721UniqueExtensionsCall::MintCross { properties, .. } => {119 withdraw_create_item::<T>(120 &collection,121 who,122 &CreateItemData::NFT(CreateNftData::default()),123 )?;124125 let token_id =126 <NonfungiblePallet<T>>::next_token_id(&collection).ok()?;127 let data_size: usize = properties128 .into_iter()129 .map(|p| p.key().len() + p.value().len())130 .sum();131132 withdraw_set_token_property::<T>(&collection, &token_id, data_size)133 .map(|()| sponsor)134 }135 _ => None,136 },137 UniqueNFTCall::ERC721UniqueMintable(138 ERC721UniqueMintableCall::Mint { .. }139 | ERC721UniqueMintableCall::MintCheckId { .. }140 | ERC721UniqueMintableCall::MintWithTokenUri { .. }141 | ERC721UniqueMintableCall::MintWithTokenUriCheckId { .. },142 ) => withdraw_create_item::<T>(143 &collection,144 who,145 &CreateItemData::NFT(CreateNftData::default()),146 )147 .map(|()| sponsor),148 UniqueNFTCall::ERC721(ERC721Call::TransferFrom {149 token_id, from, ..150 }) => {151 let token_id: TokenId = token_id.try_into().ok()?;152 let from = T::CrossAccountId::from_eth(from);153 withdraw_transfer::<T>(&collection, &from, &token_id).map(|()| sponsor)154 }155 UniqueNFTCall::ERC721(ERC721Call::Approve { token_id, .. }) => {156 let token_id: TokenId = token_id.try_into().ok()?;157 withdraw_approve::<T>(&collection, who.as_sub(), &token_id)158 .map(|()| sponsor)159 }160 _ => None,161 }162 }163 CollectionMode::ReFungible => {164 let call =165 <UniqueRefungibleCall<T>>::parse_full(&call_context.input).ok()??;166 refungible::call_sponsor(call, collection, who).map(|()| sponsor)167 }168 CollectionMode::Fungible(_) => {169 let call = <UniqueFungibleCall<T>>::parse_full(&call_context.input).ok()??;170 match call {171 UniqueFungibleCall::ERC20(ERC20Call::Transfer { .. }) => {172 withdraw_transfer::<T>(&collection, who, &TokenId::default())173 .map(|()| sponsor)174 }175 UniqueFungibleCall::ERC20(ERC20Call::TransferFrom { from, .. }) => {176 let from = T::CrossAccountId::from_eth(from);177 withdraw_transfer::<T>(&collection, &from, &TokenId::default())178 .map(|()| sponsor)179 }180 UniqueFungibleCall::ERC20(ERC20Call::Approve { .. }) => {181 withdraw_approve::<T>(&collection, who.as_sub(), &TokenId::default())182 .map(|()| sponsor)183 }184 _ => None,185 }186 }187 }?))188 } else {189 let (collection_id, token_id) =190 T::EvmTokenAddressMapping::address_to_token(&call_context.contract_address)?;191 let collection = <CollectionHandle<T>>::new(collection_id)?;192 if collection.mode != CollectionMode::ReFungible {193 return None;194 }195 let sponsor = collection.sponsorship.sponsor()?.clone();196 let rft_collection = RefungibleHandle::cast(collection);197 // Token existance isn't checked at this point and should be checked in `withdraw` method.198 let token = RefungibleTokenHandle(rft_collection, token_id);199200 let call = <UniqueRefungibleTokenCall<T>>::parse_full(&call_context.input).ok()??;201 Some(T::CrossAccountId::from_sub(202 refungible::token_call_sponsor(call, token, who).map(|()| sponsor)?,203 ))204 }205 }206}207208mod common {209 use super::*;210211 use pallet_common::erc::{CollectionCall};212213 pub fn collection_call_sponsor<T>(214 call: CollectionCall<T>,215 _collection: CollectionHandle<T>,216 _who: &T::CrossAccountId,217 ) -> Option<()>218 where219 T: UniqueConfig + FungibleConfig + NonfungibleConfig + RefungibleConfig,220 {221 use CollectionCall::*;222223 match call {224 // Readonly225 ERC165Call(_, _)226 | CollectionProperty { .. }227 | CollectionProperties { .. }228 | HasCollectionPendingSponsor229 | CollectionSponsor230 | ContractAddress231 | AllowlistedCross { .. }232 | IsOwnerOrAdminEth { .. }233 | IsOwnerOrAdminCross { .. }234 | CollectionOwner235 | CollectionAdmins236 | CollectionLimits237 | CollectionNesting238 | CollectionNestingRestrictedIds239 | CollectionNestingPermissions240 | UniqueCollectionType => None,241242 // Not sponsored243 AddToCollectionAllowList { .. }244 | AddToCollectionAllowListCross { .. }245 | RemoveFromCollectionAllowList { .. }246 | RemoveFromCollectionAllowListCross { .. }247 | AddCollectionAdminCross { .. }248 | RemoveCollectionAdminCross { .. }249 | AddCollectionAdmin { .. }250 | RemoveCollectionAdmin { .. }251 | SetNestingBool { .. }252 | SetNesting { .. }253 | SetNestingCollectionIds { .. }254 | SetCollectionAccess { .. }255 | SetCollectionMintMode { .. }256 | SetOwner { .. }257 | ChangeCollectionOwnerCross { .. }258 | SetCollectionProperty { .. }259 | SetCollectionProperties { .. }260 | DeleteCollectionProperty { .. }261 | DeleteCollectionProperties { .. }262 | SetCollectionSponsor { .. }263 | SetCollectionSponsorCross { .. }264 | SetCollectionLimit { .. }265 | ConfirmCollectionSponsorship266 | RemoveCollectionSponsor => None,267 }268 }269}