1use sp_core::{U256, H160};2use frame_support::{3 weights::{Weight, constants::WEIGHT_PER_SECOND},4 traits::{FindAuthor},5 parameter_types, ConsensusEngineId,6};7use sp_runtime::{RuntimeAppPublic, Perbill};8use crate::{9 runtime_common::{10 dispatch::CollectionDispatchT,11 ethereum::sponsoring::EvmSponsorshipHandler,12 config::sponsoring::{DefaultSponsoringFeeLimit, DefaultSponsoringRateLimit},13 DealWithFees,14 },15 Runtime, Aura, Balances, Event, ChainId,16};17use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping};18use up_common::constants::*;1920pub type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;2122impl pallet_evm::account::Config for Runtime {23 type CrossAccountId = CrossAccountId;24 type EvmAddressMapping = pallet_evm::HashedAddressMapping<Self::Hashing>;25 type EvmBackwardsAddressMapping = fp_evm_mapping::MapBackwardsAddressTruncated;26}2728293031parameter_types! {32 pub const WritesPerSecond: u64 = WEIGHT_PER_SECOND / <Runtime as frame_system::Config>::DbWeight::get().write;33 pub const GasPerSecond: u64 = WritesPerSecond::get() * 20000;34 pub const WeightPerGas: u64 = WEIGHT_PER_SECOND / GasPerSecond::get();35}3637383940const EVM_DISPATCH_RATIO: Perbill = Perbill::from_percent(50);41parameter_types! {42 pub BlockGasLimit: U256 = U256::from(NORMAL_DISPATCH_RATIO * EVM_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT / WeightPerGas::get());43}4445pub enum FixedGasWeightMapping {}46impl pallet_evm::GasWeightMapping for FixedGasWeightMapping {47 fn gas_to_weight(gas: u64) -> Weight {48 gas.saturating_mul(WeightPerGas::get())49 }50 fn weight_to_gas(weight: Weight) -> u64 {51 weight / WeightPerGas::get()52 }53}5455pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);56impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {57 fn find_author<'a, I>(digests: I) -> Option<H160>58 where59 I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,60 {61 if let Some(author_index) = F::find_author(digests) {62 let authority_id = Aura::authorities()[author_index as usize].clone();63 return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));64 }65 None66 }67}6869impl pallet_evm::Config for Runtime {70 type BlockGasLimit = BlockGasLimit;71 type FeeCalculator = pallet_configuration::FeeCalculator<Self>;72 type GasWeightMapping = FixedGasWeightMapping;73 type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;74 type CallOrigin = EnsureAddressTruncated<Self>;75 type WithdrawOrigin = EnsureAddressTruncated<Self>;76 type AddressMapping = HashedAddressMapping<Self::Hashing>;77 type PrecompilesType = ();78 type PrecompilesValue = ();79 type Currency = Balances;80 type Event = Event;81 type OnMethodCall = (82 pallet_evm_migration::OnMethodCall<Self>,83 pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,84 CollectionDispatchT<Self>,85 pallet_unique::eth::CollectionHelpersOnMethodCall<Self>,86 );87 type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;88 type ChainId = ChainId;89 type Runner = pallet_evm::runner::stack::Runner<Self>;90 type OnChargeTransaction = pallet_evm::EVMCurrencyAdapter<Balances, DealWithFees>;91 type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;92 type FindAuthor = EthereumFindAuthor<Aura>;93}9495impl pallet_evm_migration::Config for Runtime {96 type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;97}9899impl pallet_ethereum::Config for Runtime {100 type Event = Event;101 type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;102}103104parameter_types! {105 106 pub const HelpersContractAddress: H160 = H160([107 0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,108 ]);109110 111 pub const EvmCollectionHelpersAddress: H160 = H160([112 0x6c, 0x4e, 0x9f, 0xe1, 0xae, 0x37, 0xa4, 0x1e, 0x93, 0xce, 0xe4, 0x29, 0xe8, 0xe1, 0x88, 0x1a, 0xbd, 0xcb, 0xb5, 0x4f,113 ]);114}115116impl pallet_evm_contract_helpers::Config for Runtime {117 type Event = Event;118 type ContractAddress = HelpersContractAddress;119 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;120 type DefaultSponsoringFeeLimit = DefaultSponsoringFeeLimit;121}122123impl pallet_evm_coder_substrate::Config for Runtime {}124125impl pallet_evm_transaction_payment::Config for Runtime {126 type EvmSponsorshipHandler = EvmSponsorshipHandler;127}