difftreelog
CORE-302 Fix compile after rebase
in: master
6 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -6818,11 +6818,15 @@
name = "pallet-unique"
version = "0.1.0"
dependencies = [
+ "ethereum",
+ "evm-coder",
"frame-benchmarking",
"frame-support",
"frame-system",
"pallet-common",
"pallet-evm",
+ "pallet-evm-coder-substrate",
+ "pallet-nonfungible",
"parity-scale-codec 3.1.2",
"scale-info",
"serde",
pallets/unique/Cargo.tomldiffbeforeafterboth--- a/pallets/unique/Cargo.toml
+++ b/pallets/unique/Cargo.toml
@@ -33,6 +33,22 @@
limit-testing = ["up-data-structs/limit-testing"]
################################################################################
+# Standart Dependencies
+
+[dependencies.serde]
+default-features = false
+features = ['derive']
+version = '1.0.130'
+
+[dependencies.serde-json-core]
+default-features = false
+version = "0.4"
+
+[dependencies.ethereum]
+version = "0.12.0"
+default-features = false
+
+################################################################################
# Substrate Dependencies
[dependencies.codec]
@@ -66,15 +82,6 @@
# default-features = false
# git = "https://github.com/paritytech/substrate"
# branch = "polkadot-v0.9.21"
-
-[dependencies.serde]
-default-features = false
-features = ['derive']
-version = '1.0.130'
-
-[dependencies.serde-json-core]
-default-features = false
-version = "0.4"
[dependencies.sp-runtime]
default-features = false
@@ -90,7 +97,6 @@
default-features = false
git = "https://github.com/paritytech/substrate"
branch = "polkadot-v0.9.21"
-
################################################################################
# Local Dependencies
@@ -101,3 +107,6 @@
] }
pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
pallet-common = { default-features = false, path = "../common" }
+evm-coder = { default-features = false, path = '../../crates/evm-coder' }
+pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' }
+pallet-nonfungible = { default-features = false, path = '../../pallets/nonfungible' }
pallets/unique/src/eth/mod.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/>.1617pub mod evm_collection {18 use core::marker::PhantomData;19 use evm_coder::{execution::*, generate_stubgen, solidity_interface, types::*, ToLog};20 use ethereum as _;21 use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder};22 use pallet_evm::{OnMethodCall, PrecompileResult, account::CrossAccountId, Pallet as PalletEvm};23 use up_data_structs::{24 CreateCollectionData, MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_TOKEN_PREFIX_LENGTH,25 MAX_COLLECTION_NAME_LENGTH,26 };27 use frame_support::traits::Get;28 use sp_core::H160;29 use pallet_common::{CollectionHandle, CollectionById};30 31 use sp_std::{vec::Vec, rc::Rc};32 use alloc::format;33 34 pub trait Config:35 frame_system::Config36 + pallet_evm_coder_substrate::Config37 + pallet_evm::account::Config38 + pallet_nonfungible::Config39 {40 type ContractAddress: Get<H160>;41 }4243 struct EvmCollectionHelper<T: Config>(SubstrateRecorder<T>);44 impl<T: Config> WithRecorder<T> for EvmCollectionHelper<T> {45 fn recorder(&self) -> &SubstrateRecorder<T> {46 &self.047 }48 49 fn into_recorder(self) -> SubstrateRecorder<T> {50 self.051 }52 }5354 #[solidity_interface(name = "CollectionHelper")]55 impl<T: Config> EvmCollectionHelper<T> {56 fn create_721_collection(57 &self,58 caller: caller,59 name: string,60 description: string,61 token_prefix: string,62 ) -> Result<address> {63 let caller = T::CrossAccountId::from_eth(caller);64 let name = name65 .encode_utf16()66 .collect::<Vec<u16>>()67 .try_into()68 .map_err(|_| error_feild_too_long(stringify!(name), MAX_COLLECTION_NAME_LENGTH))?;69 let description = description70 .encode_utf16()71 .collect::<Vec<u16>>()72 .try_into()73 .map_err(|_| {74 error_feild_too_long(stringify!(description), MAX_COLLECTION_DESCRIPTION_LENGTH)75 })?;76 let token_prefix = token_prefix77 .into_bytes()78 .try_into()79 .map_err(|_| error_feild_too_long(stringify!(token_prefix), MAX_TOKEN_PREFIX_LENGTH))?;80 81 let data = CreateCollectionData {82 name,83 description,84 token_prefix,85 ..Default::default()86 };87 88 let collection_id =89 <pallet_nonfungible::Pallet<T>>::init_collection(caller.as_sub().clone(), data)90 .map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;91 92 let address = pallet_common::eth::collection_id_to_address(collection_id);93 <PalletEvm<T>>::deposit_log(94 EthCollectionEvent::CollectionCreated {95 owner: *caller.as_eth(),96 collection_id: address,97 }98 .to_log(address),99 );100 Ok(address)101 }102103 fn is_collection_exist(&self, _caller: caller, collection_address: address) -> Result<bool> {104 if let Some(id) = pallet_common::eth::map_eth_to_id(&collection_address) {105 let collection_id = id;106 return Ok(<CollectionById<T>>::contains_key(collection_id));107 }108109 Ok(false)110 }111 }112 113 struct EvmCollection<T: Config>(H160, SubstrateRecorder<T>);114 impl<T: Config> WithRecorder<T> for EvmCollection<T> {115 fn recorder(&self) -> &SubstrateRecorder<T> {116 &self.1117 }118 119 fn into_recorder(self) -> SubstrateRecorder<T> {120 self.1121 }122 }123 124 #[derive(ToLog)]125 pub enum EthCollectionEvent {126 CollectionCreated {127 #[indexed]128 owner: address,129 #[indexed]130 collection_id: address,131 },132 }133 134 #[solidity_interface(name = "Collection")]135 impl<T: Config> EvmCollection<T> {136 fn set_sponsor(137 &self,138 caller: caller,139 sponsor: address,140 ) -> Result<void> {141 let mut collection = collection_from_address::<T>(self.contract_address(caller).unwrap(), self.1.gas_left())?;142 check_is_owner(caller, &collection)?;143 144 let sponsor = T::CrossAccountId::from_eth(sponsor);145 collection.set_sponsor(sponsor.as_sub().clone());146 collection.save().map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;147 Ok(())148 }149 150 fn confirm_sponsorship(&self, caller: caller) -> Result<void> {151 let mut collection = collection_from_address::<T>(self.contract_address(caller).unwrap(), self.1.gas_left())?;152 let caller = T::CrossAccountId::from_eth(caller);153 if !collection.confirm_sponsorship(caller.as_sub()) {154 return Err(Error::Revert("Caller is not set as sponsor".into()));155 }156 collection.save().map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;157 Ok(())158 }159 160 fn set_limits(161 &self,162 caller: caller,163 limits_json: string,164 ) -> Result<void> {165 let mut collection = collection_from_address::<T>(self.contract_address(caller).unwrap(), self.1.gas_left())?;166 check_is_owner(caller, &collection)?;167 168 let limits = serde_json_core::from_str(limits_json.as_ref())169 .map_err(|e| Error::Revert(format!("Parse JSON error: {}", e)))?;170 collection.limits = limits.0;171 collection.save().map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;172 Ok(())173 }174175 fn contract_address(&self, _caller: caller) -> Result<address> {176 Ok(self.0)177 }178 }179 180 fn error_feild_too_long(feild: &str, bound: u32) -> Error {181 Error::Revert(format!("{} is too long. Max length is {}.", feild, bound))182 }183 184 fn collection_from_address<T: Config>(185 collection_address: address,186 gas_limit: u64187 ) -> Result<CollectionHandle<T>> {188 let collection_id = pallet_common::eth::map_eth_to_id(&collection_address)189 .ok_or(Error::Revert("Contract is not an unique collection".into()))?;190 let recorder = <SubstrateRecorder<T>>::new(gas_limit);191 let collection =192 pallet_common::CollectionHandle::new_with_recorder(collection_id, recorder)193 .ok_or(Error::Revert("Create collection handle error".into()))?;194 Ok(collection)195 }196 197 fn check_is_owner<T: Config>(caller: caller, collection: &CollectionHandle<T>) -> Result<()> {198 let caller = T::CrossAccountId::from_eth(caller);199 collection200 .check_is_owner(&caller)201 .map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;202 Ok(())203 }204205 pub struct CollectionHelperOnMethodCall<T: Config>(PhantomData<*const T>);206 impl<T: Config> OnMethodCall<T> for CollectionHelperOnMethodCall<T> {207 fn is_reserved(contract: &sp_core::H160) -> bool {208 contract == &T::ContractAddress::get()209 }210 211 fn is_used(contract: &sp_core::H160) -> bool {212 contract == &T::ContractAddress::get()213 }214 215 fn call(216 source: &sp_core::H160,217 target: &sp_core::H160,218 gas_left: u64,219 input: &[u8],220 value: sp_core::U256,221 ) -> Option<PrecompileResult> {222 if target != &T::ContractAddress::get() {223 return None;224 }225 226 let helpers = EvmCollectionHelper::<T>(SubstrateRecorder::<T>::new(gas_left));227 pallet_evm_coder_substrate::call(*source, helpers, value, input)228 }229 230 fn get_code(contract: &sp_core::H160) -> Option<Vec<u8>> {231 (contract == &T::ContractAddress::get())232 .then(|| include_bytes!("./stubs/CollectionHelper.raw").to_vec())233 }234 }235 236 generate_stubgen!(collection_helper_impl, CollectionHelperCall<()>, true);237 generate_stubgen!(collection_helper_iface, CollectionHelperCall<()>, false);238 239 pub struct CollectionOnMethodCall<T: Config>(PhantomData<*const T>);240 impl<T: Config> OnMethodCall<T> for CollectionOnMethodCall<T> {241 fn is_reserved(contract: &sp_core::H160) -> bool {242 contract == &T::ContractAddress::get()243 }244 245 fn is_used(contract: &sp_core::H160) -> bool {246 contract == &T::ContractAddress::get()247 }248 249 fn call(250 source: &sp_core::H160,251 target: &sp_core::H160,252 gas_left: u64,253 input: &[u8],254 value: sp_core::U256,255 ) -> Option<PrecompileResult> {256 if !pallet_common::eth::is_collection(target) {257 return None;258 }259260 let helpers = EvmCollection::<T>(*target, SubstrateRecorder::<T>::new(gas_left));261 pallet_evm_coder_substrate::call(*source, helpers, value, input)262 }263 264 fn get_code(contract: &sp_core::H160) -> Option<Vec<u8>> {265 (contract == &T::ContractAddress::get())266 .then(|| include_bytes!("./stubs/Collection.raw").to_vec())267 }268 }269 270 generate_stubgen!(collection_impl, CollectionCall<()>, true);271 generate_stubgen!(collection_iface, CollectionCall<()>, false);272}pallets/unique/src/lib.rsdiffbeforeafterboth--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -22,6 +22,8 @@
clippy::unused_unit
)]
+extern crate alloc;
+
use frame_support::{
decl_module, decl_storage, decl_error, decl_event,
dispatch::DispatchResult,
@@ -46,7 +48,7 @@
CollectionHandle, Pallet as PalletCommon, CommonWeightInfo, dispatch::dispatch_call,
dispatch::CollectionDispatch,
};
-pub use eth::evm_collection;
+pub mod eth;
#[cfg(feature = "runtime-benchmarks")]
mod benchmarking;
runtime/quartz/src/lib.rsdiffbeforeafterboth--- a/runtime/quartz/src/lib.rs
+++ b/runtime/quartz/src/lib.rs
@@ -66,7 +66,6 @@
WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients, ConstantMultiplier,
},
};
-use unique_runtime_common::dispatch::{CollectionDispatchT, CollectionDispatch};
use up_data_structs::*;
// use pallet_contracts::weights::WeightInfo;
// #[cfg(any(feature = "std", test))]
@@ -79,8 +78,8 @@
};
use smallvec::smallvec;
use codec::{Encode, Decode};
-use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, OnMethodCall};
-use pallet_unique::evm_collection;
+use pallet_unique::eth::evm_collection;
+use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping};
use fp_rpc::TransactionStatus;
use sp_runtime::{
traits::{BlockNumberProvider, Dispatchable, PostDispatchInfoOf, Saturating},
@@ -117,7 +116,15 @@
//use xcm_executor::traits::MatchesFungible;
use sp_runtime::traits::CheckedConversion;
-use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};
+use unique_runtime_common::{
+ impl_common_runtime_apis,
+ types::*,
+ constants::*,
+ dispatch::{CollectionDispatchT, CollectionDispatch},
+ sponsoring::UniqueSponsorshipHandler,
+ eth_sponsoring::UniqueEthSponsorshipHandler,
+ weights::CommonWeights,
+};
pub const RUNTIME_NAME: &str = "quartz";
pub const TOKEN_SYMBOL: &str = "QTZ";
@@ -894,6 +901,7 @@
impl pallet_unique::Config for Runtime {
type Event = Event;
type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;
+ type CommonWeightInfo = CommonWeights<Self>;
}
parameter_types! {
@@ -915,11 +923,11 @@
// }
type EvmSponsorshipHandler = (
- pallet_unique::UniqueEthSponsorshipHandler<Runtime>,
+ UniqueEthSponsorshipHandler<Runtime>,
pallet_evm_contract_helpers::HelpersContractSponsoring<Runtime>,
);
type SponsorshipHandler = (
- pallet_unique::UniqueSponsorshipHandler<Runtime>,
+ UniqueSponsorshipHandler<Runtime>,
//pallet_contract_helpers::ContractSponsorshipHandler<Runtime>,
pallet_evm_transaction_payment::BridgeSponsorshipHandler<Runtime>,
);
runtime/unique/src/lib.rsdiffbeforeafterboth--- a/runtime/unique/src/lib.rs
+++ b/runtime/unique/src/lib.rs
@@ -50,6 +50,7 @@
pub use pallet_balances::Call as BalancesCall;
pub use pallet_evm::{
EnsureAddressTruncated, HashedAddressMapping, Runner, account::CrossAccountId as _, OnMethodCall,
+ Account as EVMAccount, FeeCalculator, GasWeightMapping,
};
pub use frame_support::{
construct_runtime, match_types,
@@ -84,8 +85,7 @@
};
use smallvec::smallvec;
use codec::{Encode, Decode};
-use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, OnMethodCall};
-use pallet_unique::evm_collection;
+use pallet_unique::eth::evm_collection;
use fp_rpc::TransactionStatus;
use sp_runtime::{
traits::{BlockNumberProvider, Dispatchable, PostDispatchInfoOf, Saturating},
@@ -121,7 +121,15 @@
//use xcm_executor::traits::MatchesFungible;
use sp_runtime::traits::CheckedConversion;
-use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};
+use unique_runtime_common::{
+ impl_common_runtime_apis,
+ types::*,
+ constants::*,
+ dispatch::{CollectionDispatchT, CollectionDispatch},
+ sponsoring::UniqueSponsorshipHandler,
+ eth_sponsoring::UniqueEthSponsorshipHandler,
+ weights::CommonWeights,
+};
pub const RUNTIME_NAME: &str = "unique";
pub const TOKEN_SYMBOL: &str = "UNQ";