difftreelog
Merge branch 'develop' into feature/CORE-324
in: master
17 files changed
.envdiffbeforeafterboth1RUST_TOOLCHAIN=nightly-2021-11-111RUST_TOOLCHAIN=nightly-2021-11-112RUST_C=1.58.0-nightly2RUST_C=1.58.0-nightly3POLKA_VERSION=release-v0.9.173POLKA_VERSION=release-v0.9.184UNIQUE_BRANCH=develop4UNIQUE_BRANCH=develop5USER=***5USER=***6PASS=***6PASS=***Cargo.lockdiffbeforeafterboth557555755576[[package]]5576[[package]]5577name = "opal-runtime"5577name = "opal-runtime"5578version = "0.1.0"5578version = "0.9.18"5579dependencies = [5579dependencies = [5580 "cumulus-pallet-aura-ext",5580 "cumulus-pallet-aura-ext",5581 "cumulus-pallet-dmp-queue",5581 "cumulus-pallet-dmp-queue",870987098710[[package]]8710[[package]]8711name = "quartz-runtime"8711name = "quartz-runtime"8712version = "0.1.0"8712version = "0.9.18"8713dependencies = [8713dependencies = [8714 "cumulus-pallet-aura-ext",8714 "cumulus-pallet-aura-ext",8715 "cumulus-pallet-dmp-queue",8715 "cumulus-pallet-dmp-queue",8723 "fp-evm-mapping",8723 "fp-evm-mapping",8724 "fp-rpc",8724 "fp-rpc",8725 "fp-self-contained",8725 "fp-self-contained",8726 "frame-benchmarking",8727 "frame-executive",8726 "frame-executive",8728 "frame-support",8727 "frame-support",8729 "frame-system",8728 "frame-system",8730 "frame-system-benchmarking",8731 "frame-system-rpc-runtime-api",8729 "frame-system-rpc-runtime-api",8732 "hex-literal",8733 "orml-vesting",8730 "orml-vesting",8734 "pallet-aura",8731 "pallet-aura",8735 "pallet-balances",8732 "pallet-balances",125511254812552[[package]]12549[[package]]12553name = "unique-runtime"12550name = "unique-runtime"12554version = "0.9.17"12551version = "0.9.18"12555dependencies = [12552dependencies = [12556 "cumulus-pallet-aura-ext",12553 "cumulus-pallet-aura-ext",12557 "cumulus-pallet-dmp-queue",12554 "cumulus-pallet-dmp-queue",126271262412628[[package]]12625[[package]]12629name = "unique-runtime-common"12626name = "unique-runtime-common"12630version = "0.1.0"12627version = "0.9.18"12631dependencies = [12628dependencies = [12632 "fp-rpc",12629 "fp-rpc",12633 "frame-support",12630 "frame-support",Cargo.tomldiffbeforeafterboth5 'pallets/*',5 'pallets/*',6 'client/*',6 'client/*',7 'primitives/*',7 'primitives/*',8 'runtime/*',9 'crates/*',8 'crates/*',10]9]10exclude = [11 "runtime/unique",12 "runtime/quartz"13]11[profile.release]14[profile.release]12panic = 'unwind'15panic = 'unwind'1316Dockerfile-parachaindiffbeforeafterboth1# ===== Rust builder =====1# ===== Rust builder =====2FROM phusion/baseimage:focal-1.0.0 as rust-builder2FROM phusion/baseimage:focal-1.1.0 as rust-builder3LABEL maintainer="Unique.Network"3LABEL maintainer="Unique.Network"445ARG RUST_TOOLCHAIN=nightly-2021-11-115ARG RUST_TOOLCHAIN=nightly-2021-11-11777778# ===== RUN ======78# ===== RUN ======797980FROM phusion/baseimage:focal-1.0.080FROM phusion/baseimage:focal-1.1.0818182ARG PROFILE=release82ARG PROFILE=release8383README.mddiffbeforeafterboth6363645. Build:645. Build:65```bash65```bash66cargo build66cargo build --features=unique-runtime,quartz-runtime --release67```67```686869optionally, build in release:70```bash71cargo build --release72```7374## Building as Parachain locally69## Building as Parachain locally757076Note: checkout this project and all related projects (see below) in the sibling folders (both under the same folder)71Note: checkout this project and all related projects (see below) in the sibling folders (both under the same folder)node/cli/Cargo.tomldiffbeforeafterboth312unique-rpc = { default-features = false, path = "../rpc" }312unique-rpc = { default-features = false, path = "../rpc" }313313314[features]314[features]315default = ["unique-runtime", "quartz-runtime"]315default = []316runtime-benchmarks = [316runtime-benchmarks = [317 'unique-runtime/runtime-benchmarks',317 'unique-runtime/runtime-benchmarks',318 'polkadot-service/runtime-benchmarks',318 'polkadot-service/runtime-benchmarks',node/cli/src/chain_spec.rsdiffbeforeafterboth14// You should have received a copy of the GNU General Public License14// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.161617use cumulus_primitives_core::ParaId;18use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};17use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};19use sc_service::ChainType;18use sc_service::ChainType;20use sp_core::{sr25519, Pair, Public};19use sp_core::{sr25519, Pair, Public};262527use unique_runtime_common::types::*;26use unique_runtime_common::types::*;2728#[cfg(feature = "unique-runtime")]29use unique_runtime as default_runtime;3031#[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]32use quartz_runtime as default_runtime;3334#[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]35use opal_runtime as default_runtime;283629/// The `ChainSpec` parameterized for the unique runtime.37/// The `ChainSpec` parameterized for the unique runtime.30#[cfg(feature = "unique-runtime")]38#[cfg(feature = "unique-runtime")]37/// The `ChainSpec` parameterized for the opal runtime.45/// The `ChainSpec` parameterized for the opal runtime.38pub type OpalChainSpec = sc_service::GenericChainSpec<opal_runtime::GenesisConfig, Extensions>;46pub type OpalChainSpec = sc_service::GenericChainSpec<opal_runtime::GenesisConfig, Extensions>;4748#[cfg(feature = "unique-runtime")]49pub type DefaultChainSpec = UniqueChainSpec;5051#[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]52pub type DefaultChainSpec = QuartzChainSpec;5354#[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]55pub type DefaultChainSpec = OpalChainSpec;395640pub enum RuntimeId {57pub enum RuntimeId {58 #[cfg(feature = "unique-runtime")]41 Unique,59 Unique,6061 #[cfg(feature = "quartz-runtime")]42 Quartz,62 Quartz,6343 Opal,64 Opal,51impl RuntimeIdentification for Box<dyn sc_service::ChainSpec> {72impl RuntimeIdentification for Box<dyn sc_service::ChainSpec> {52 fn runtime_id(&self) -> RuntimeId {73 fn runtime_id(&self) -> RuntimeId {53 #[cfg(feature = "unique-runtime")]74 #[cfg(feature = "unique-runtime")]54 if self.id().starts_with("unique") {75 if self.id().starts_with("unique") || self.id().starts_with("unq") {55 return RuntimeId::Unique;76 return RuntimeId::Unique;56 }77 }577858 #[cfg(feature = "quartz-runtime")]79 #[cfg(feature = "quartz-runtime")]59 if self.id().starts_with("quartz") {80 if self.id().starts_with("quartz") || self.id().starts_with("qtz") {60 return RuntimeId::Quartz;81 return RuntimeId::Quartz;61 }82 }6283121 AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()142 AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()122}143}144145macro_rules! testnet_genesis {146 (147 $runtime:path,148 $root_key:expr,149 $initial_authorities:expr,150 $endowed_accounts:expr,151 $id:expr152 ) => {{153 use $runtime::*;154155 GenesisConfig {156 system: SystemConfig {157 code: WASM_BINARY158 .expect("WASM binary was not build, please build it!")159 .to_vec(),160 },161 balances: BalancesConfig {162 balances: $endowed_accounts163 .iter()164 .cloned()165 // 1e13 UNQ166 .map(|k| (k, 1 << 100))167 .collect(),168 },169 treasury: Default::default(),170 sudo: SudoConfig {171 key: Some($root_key),172 },173 vesting: VestingConfig { vesting: vec![] },174 parachain_info: ParachainInfoConfig {175 parachain_id: $id.into(),176 },177 parachain_system: Default::default(),178 aura: AuraConfig {179 authorities: $initial_authorities,180 },181 aura_ext: Default::default(),182 evm: EVMConfig {183 accounts: BTreeMap::new(),184 },185 ethereum: EthereumConfig {},186 }187 }};188}123189124pub fn development_config() -> OpalChainSpec {190pub fn development_config() -> OpalChainSpec {125 let mut properties = Map::new();191 let mut properties = Map::new();126 properties.insert("tokenSymbol".into(), "OPL".into());192 properties.insert("tokenSymbol".into(), opal_runtime::TOKEN_SYMBOL.into());127 properties.insert("tokenDecimals".into(), 15.into());193 properties.insert("tokenDecimals".into(), 18.into());128 properties.insert("ss58Format".into(), 42.into());194 properties.insert("ss58Format".into(), opal_runtime::SS58Prefix::get().into());129195130 OpalChainSpec::from_genesis(196 OpalChainSpec::from_genesis(131 // Name197 // Name132 "Development",198 "OPAL by UNIQUE",133 // ID199 // ID134 "dev",200 "opal_dev",135 ChainType::Local,201 ChainType::Local,136 move || {202 move || {137 testnet_genesis(203 testnet_genesis!(204 opal_runtime,138 // Sudo account205 // Sudo account139 get_account_id_from_seed::<sr25519::Public>("Alice"),206 get_account_id_from_seed::<sr25519::Public>("Alice"),140 vec![207 vec![141 get_from_seed::<AuraId>("Alice"),208 get_from_seed::<AuraId>("Alice"),142 get_from_seed::<AuraId>("Bob"),209 get_from_seed::<AuraId>("Bob"),146 get_account_id_from_seed::<sr25519::Public>("Alice"),213 get_account_id_from_seed::<sr25519::Public>("Alice"),147 get_account_id_from_seed::<sr25519::Public>("Bob"),214 get_account_id_from_seed::<sr25519::Public>("Bob"),148 ],215 ],149 1000.into(),216 1000150 )217 )151 },218 },152 // Bootnodes219 // Bootnodes166 )233 )167}234}168235169pub fn local_testnet_rococo_config() -> OpalChainSpec {236pub fn local_testnet_rococo_config() -> DefaultChainSpec {237 let mut properties = Map::new();238 properties.insert("tokenSymbol".into(), default_runtime::TOKEN_SYMBOL.into());239 properties.insert("tokenDecimals".into(), 18.into());240 properties.insert(241 "ss58Format".into(),242 default_runtime::SS58Prefix::get().into(),243 );244170 OpalChainSpec::from_genesis(245 DefaultChainSpec::from_genesis(171 // Name246 // Name247 format!(248 "{}{}",249 default_runtime::RUNTIME_NAME.to_uppercase(),250 if cfg!(feature = "unique-runtime") {251 ""252 } else {253 " by UNIQUE"254 }255 )172 "Local Testnet",256 .as_str(),173 // ID257 // ID174 "local_testnet",258 format!("{}_local", default_runtime::RUNTIME_NAME).as_str(),175 ChainType::Local,259 ChainType::Local,176 move || {260 move || {177 testnet_genesis(261 testnet_genesis!(262 default_runtime,178 // Sudo account263 // Sudo account179 get_account_id_from_seed::<sr25519::Public>("Alice"),264 get_account_id_from_seed::<sr25519::Public>("Alice"),180 vec![265 vec![181 get_from_seed::<AuraId>("Alice"),266 get_from_seed::<AuraId>("Alice"),182 get_from_seed::<AuraId>("Bob"),267 get_from_seed::<AuraId>("Bob"),196 get_account_id_from_seed::<sr25519::Public>("Eve//stash"),281 get_account_id_from_seed::<sr25519::Public>("Eve//stash"),197 get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),282 get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),198 ],283 ],199 1000.into(),284 1000200 )285 )201 },286 },202 // Bootnodes287 // Bootnodes207 None,292 None,208 None,293 None,209 // Properties294 // Properties210 None,295 Some(properties),211 // Extensions296 // Extensions212 Extensions {297 Extensions {213 relay_chain: "rococo-local".into(),298 relay_chain: "rococo-local".into(),216 )301 )217}302}218219fn testnet_genesis(220 root_key: AccountId,221 initial_authorities: Vec<AuraId>,222 endowed_accounts: Vec<AccountId>,223 id: ParaId,224) -> opal_runtime::GenesisConfig {225 use opal_runtime::*;226227 GenesisConfig {228 system: SystemConfig {229 code: WASM_BINARY230 .expect("WASM binary was not build, please build it!")231 .to_vec(),232 },233 balances: BalancesConfig {234 balances: endowed_accounts235 .iter()236 .cloned()237 // 1e13 UNQ238 .map(|k| (k, 1 << 100))239 .collect(),240 },241 treasury: Default::default(),242 sudo: SudoConfig {243 key: Some(root_key),244 },245 vesting: VestingConfig { vesting: vec![] },246 parachain_info: ParachainInfoConfig { parachain_id: id },247 parachain_system: Default::default(),248 aura: AuraConfig {249 authorities: initial_authorities,250 },251 aura_ext: Default::default(),252 evm: EVMConfig {253 accounts: BTreeMap::new(),254 },255 ethereum: EthereumConfig {},256 }257}258303node/cli/src/service.rsdiffbeforeafterboth616162use unique_runtime_common::types::{AuraId, RuntimeInstance, AccountId, Balance, Index, Hash, Block};62use unique_runtime_common::types::{AuraId, RuntimeInstance, AccountId, Balance, Index, Hash, Block};636364/// Native executor instance.64/// Unique native executor instance.65#[cfg(feature = "unique-runtime")]65pub struct UniqueRuntimeExecutor;66pub struct UniqueRuntimeExecutor;6768#[cfg(feature = "quartz-runtime")]69/// Quartz native executor instance.7066pub struct QuartzRuntimeExecutor;71pub struct QuartzRuntimeExecutor;7273/// Opal native executor instance.67pub struct OpalRuntimeExecutor;74pub struct OpalRuntimeExecutor;687569#[cfg(feature = "unique-runtime")]76#[cfg(feature = "unique-runtime")]pallets/unique/src/eth/sponsoring.rsdiffbeforeafterboth24use up_sponsorship::SponsorshipHandler;24use up_sponsorship::SponsorshipHandler;25use core::marker::PhantomData;25use core::marker::PhantomData;26use core::convert::TryInto;26use core::convert::TryInto;27use up_data_structs::TokenId;28use pallet_evm::account::CrossAccountId;27use pallet_evm::account::CrossAccountId;292830use pallet_nonfungible::erc::{UniqueNFTCall, ERC721UniqueExtensionsCall, ERC721Call};29use pallet_nonfungible::erc::{30 UniqueNFTCall, ERC721UniqueExtensionsCall, ERC721MintableCall, ERC721Call,31};31use pallet_fungible::erc::{UniqueFungibleCall, ERC20Call};32use pallet_fungible::erc::{UniqueFungibleCall, ERC20Call};32use up_data_structs::{CreateItemData, CreateNftData};33use up_data_structs::{TokenId, CreateItemData, CreateNftData};333434pub struct UniqueEthSponsorshipHandler<T: Config>(PhantomData<*const T>);35pub struct UniqueEthSponsorshipHandler<T: Config>(PhantomData<*const T>);35impl<T: Config> SponsorshipHandler<T::CrossAccountId, (H160, Vec<u8>)>36impl<T: Config> SponsorshipHandler<T::CrossAccountId, (H160, Vec<u8>)>50 let token_id: TokenId = token_id.try_into().ok()?;51 let token_id: TokenId = token_id.try_into().ok()?;51 withdraw_transfer::<T>(&collection, &who, &token_id).map(|()| sponsor)52 withdraw_transfer::<T>(&collection, &who, &token_id).map(|()| sponsor)52 }53 }54 UniqueNFTCall::ERC721Mintable(55 ERC721MintableCall::Mint { token_id, .. }56 | ERC721MintableCall::MintWithTokenUri { token_id, .. },57 ) => {58 let _token_id: TokenId = token_id.try_into().ok()?;59 withdraw_create_item::<T>(60 &collection,61 &who,62 &CreateItemData::NFT(CreateNftData::default()),63 )64 .map(|()| sponsor)65 }53 UniqueNFTCall::ERC721(ERC721Call::TransferFrom { token_id, from, .. }) => {66 UniqueNFTCall::ERC721(ERC721Call::TransferFrom { token_id, from, .. }) => {54 let token_id: TokenId = token_id.try_into().ok()?;67 let token_id: TokenId = token_id.try_into().ok()?;55 let from = T::CrossAccountId::from_eth(from);68 let from = T::CrossAccountId::from_eth(from);60 withdraw_approve::<T>(&collection, who.as_sub(), &token_id)73 withdraw_approve::<T>(&collection, who.as_sub(), &token_id)61 .map(|()| sponsor)74 .map(|()| sponsor)62 }75 }63 UniqueNFTCall::ERC721Mintable(call) => match call {64 pallet_nonfungible::erc::ERC721MintableCall::Mint { .. }65 | pallet_nonfungible::erc::ERC721MintableCall::MintWithTokenUri {66 ..67 } => withdraw_create_item(68 &collection,69 who.as_sub(),70 &CreateItemData::NFT(CreateNftData::default()),71 )72 .map(|()| sponsor),73 _ => None,74 },75 _ => None,76 _ => None,76 }77 }77 }78 }pallets/unique/src/sponsorship.rsdiffbeforeafterboth103103104pub fn withdraw_create_item<T: Config>(104pub fn withdraw_create_item<T: Config>(105 collection: &CollectionHandle<T>,105 collection: &CollectionHandle<T>,106 who: &T::AccountId,106 who: &T::CrossAccountId,107 _properties: &CreateItemData,107 _properties: &CreateItemData,108) -> Option<()> {108) -> Option<()> {109 if _properties.data_size() as u32 > collection.limits.sponsored_data_size() {109 if _properties.data_size() as u32 > collection.limits.sponsored_data_size() {120 CreateItemData::ReFungible(_) => REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,120 CreateItemData::ReFungible(_) => REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,121 });121 });122122123 if let Some(last_tx_block) = <CreateItemBasket<T>>::get((collection.id, &who)) {123 if let Some(last_tx_block) = <CreateItemBasket<T>>::get((collection.id, who.as_sub())) {124 let timeout = last_tx_block + limit.into();124 let timeout = last_tx_block + limit.into();125 if block_number < timeout {125 if block_number < timeout {126 return None;126 return None;127 }127 }128 }128 }129129130 CreateItemBasket::<T>::insert((collection.id, who.clone()), block_number);130 CreateItemBasket::<T>::insert((collection.id, who.as_sub()), block_number);131131132 Some(())132 Some(())133}133}248 let (sponsor, collection) = load(*collection_id)?;248 let (sponsor, collection) = load(*collection_id)?;249 withdraw_create_item::<T>(&collection, who, data).map(|()| sponsor)249 withdraw_create_item::<T>(250 &collection,251 &T::CrossAccountId::from_sub(who.clone()),252 data,253 )254 .map(|()| sponsor)250 }255 }runtime/common/Cargo.tomldiffbeforeafterboth6license = 'All Rights Reserved'6license = 'All Rights Reserved'7name = 'unique-runtime-common'7name = 'unique-runtime-common'8repository = 'https://github.com/UniqueNetwork/unique-chain'8repository = 'https://github.com/UniqueNetwork/unique-chain'9version = '0.1.0'9version = '0.9.18'101011[features]11[features]12default = ['std']12default = ['std']runtime/opal/Cargo.tomldiffbeforeafterboth10license = 'GPLv3'10license = 'GPLv3'11name = 'opal-runtime'11name = 'opal-runtime'12repository = 'https://github.com/UniqueNetwork/unique-chain'12repository = 'https://github.com/UniqueNetwork/unique-chain'13version = '0.1.0'13version = '0.9.18'141415[package.metadata.docs.rs]15[package.metadata.docs.rs]16targets = ['x86_64-unknown-linux-gnu']16targets = ['x86_64-unknown-linux-gnu']runtime/opal/src/lib.rsdiffbeforeafterboth116116117use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};117use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};118118119pub const RUNTIME_NAME: &str = "Opal";119pub const RUNTIME_NAME: &str = "opal";120pub const TOKEN_SYMBOL: &str = "OPL";120121121type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;122type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;122123168 spec_name: create_runtime_str!(RUNTIME_NAME),169 spec_name: create_runtime_str!(RUNTIME_NAME),169 impl_name: create_runtime_str!(RUNTIME_NAME),170 impl_name: create_runtime_str!(RUNTIME_NAME),170 authoring_version: 1,171 authoring_version: 1,171 spec_version: 917004,172 spec_version: 918001,172 impl_version: 0,173 impl_version: 0,173 apis: RUNTIME_API_VERSIONS,174 apis: RUNTIME_API_VERSIONS,174 transaction_version: 1,175 transaction_version: 1,runtime/quartz/Cargo.tomldiffbeforeafterboth10license = 'GPLv3'10license = 'GPLv3'11name = 'quartz-runtime'11name = 'quartz-runtime'12repository = 'https://github.com/UniqueNetwork/unique-chain'12repository = 'https://github.com/UniqueNetwork/unique-chain'13version = '0.1.0'13version = '0.9.18'141415[package.metadata.docs.rs]15[package.metadata.docs.rs]16targets = ['x86_64-unknown-linux-gnu']16targets = ['x86_64-unknown-linux-gnu']runtime/quartz/src/lib.rsdiffbeforeafterboth116116117use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};117use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};118118119pub const RUNTIME_NAME: &str = "Quartz";119pub const RUNTIME_NAME: &str = "quartz";120pub const TOKEN_SYMBOL: &str = "QTZ";120121121type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;122type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;122123153 spec_name: create_runtime_str!(RUNTIME_NAME),154 spec_name: create_runtime_str!(RUNTIME_NAME),154 impl_name: create_runtime_str!(RUNTIME_NAME),155 impl_name: create_runtime_str!(RUNTIME_NAME),155 authoring_version: 1,156 authoring_version: 1,156 spec_version: 917004,157 spec_version: 918001,157 impl_version: 0,158 impl_version: 0,158 apis: RUNTIME_API_VERSIONS,159 apis: RUNTIME_API_VERSIONS,159 transaction_version: 1,160 transaction_version: 1,runtime/unique/Cargo.tomldiffbeforeafterboth10license = 'GPLv3'10license = 'GPLv3'11name = 'unique-runtime'11name = 'unique-runtime'12repository = 'https://github.com/UniqueNetwork/unique-chain'12repository = 'https://github.com/UniqueNetwork/unique-chain'13version = '0.9.17'13version = '0.9.18'141415[package.metadata.docs.rs]15[package.metadata.docs.rs]16targets = ['x86_64-unknown-linux-gnu']16targets = ['x86_64-unknown-linux-gnu']runtime/unique/src/lib.rsdiffbeforeafterboth115115116use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};116use unique_runtime_common::{impl_common_runtime_apis, types::*, constants::*};117117118pub const RUNTIME_NAME: &str = "Unique";118pub const RUNTIME_NAME: &str = "unique";119pub const TOKEN_SYMBOL: &str = "UNQ";119120120type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;121type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;121122152 spec_name: create_runtime_str!(RUNTIME_NAME),153 spec_name: create_runtime_str!(RUNTIME_NAME),153 impl_name: create_runtime_str!(RUNTIME_NAME),154 impl_name: create_runtime_str!(RUNTIME_NAME),154 authoring_version: 1,155 authoring_version: 1,155 spec_version: 917004,156 spec_version: 918001,156 impl_version: 0,157 impl_version: 0,157 apis: RUNTIME_API_VERSIONS,158 apis: RUNTIME_API_VERSIONS,158 transaction_version: 1,159 transaction_version: 1,