1use sp_core::{U256, H160};2use frame_support::{3 weights::{Weight, constants::WEIGHT_REF_TIME_PER_SECOND},4 traits::{FindAuthor},5 parameter_types, ConsensusEngineId,6};7use sp_runtime::{RuntimeAppPublic, Perbill};8use crate::{9 runtime_common::{10 config::sponsoring::DefaultSponsoringRateLimit,11 DealWithFees,12 dispatch::CollectionDispatchT,13 ethereum::{precompiles::UniquePrecompiles, sponsoring::EvmSponsorshipHandler},14 },15 Runtime, Aura, Balances, RuntimeEvent, ChainId,16};17use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping};18use pallet_ethereum::PostLogContent;19use up_common::constants::*;2021pub type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;2223242526272829parameter_types! {30 pub const ReadsPerSecond: u64 = WEIGHT_REF_TIME_PER_SECOND / <Runtime as frame_system::Config>::DbWeight::get().read;31 pub const GasPerSecond: u64 = ReadsPerSecond::get() * 2100;32 pub const WeightTimePerGas: u64 = WEIGHT_REF_TIME_PER_SECOND / GasPerSecond::get();3334 pub const WeightPerGas: Weight = Weight::from_parts(WeightTimePerGas::get(), 0);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 / WeightTimePerGas::get()).ref_time());43 pub PrecompilesValue: UniquePrecompiles<Runtime> = UniquePrecompiles::<_>::new();44}4546pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);47impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {48 fn find_author<'a, I>(digests: I) -> Option<H160>49 where50 I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,51 {52 if let Some(author_index) = F::find_author(digests) {53 let authority_id = Aura::authorities()[author_index as usize].clone();54 return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));55 }56 None57 }58}5960impl pallet_evm::Config for Runtime {61 type CrossAccountId = CrossAccountId;62 type AddressMapping = HashedAddressMapping<Self::Hashing>;63 type BackwardsAddressMapping = HashedAddressMapping<Self::Hashing>;64 type BlockGasLimit = BlockGasLimit;65 type FeeCalculator = pallet_configuration::FeeCalculator<Self>;66 type GasWeightMapping = pallet_evm::FixedGasWeightMapping<Self>;67 type WeightPerGas = WeightPerGas;68 type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;69 type CallOrigin = EnsureAddressTruncated<Self>;70 type WithdrawOrigin = EnsureAddressTruncated<Self>;71 type PrecompilesType = UniquePrecompiles<Self>;72 type PrecompilesValue = PrecompilesValue;73 type Currency = Balances;74 type RuntimeEvent = RuntimeEvent;75 type OnMethodCall = (76 pallet_evm_migration::OnMethodCall<Self>,77 pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,78 CollectionDispatchT<Self>,79 pallet_unique::eth::CollectionHelpersOnMethodCall<Self>,80 );81 type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;82 type ChainId = ChainId;83 type Runner = pallet_evm::runner::stack::Runner<Self>;84 type OnChargeTransaction = pallet_evm::EVMCurrencyAdapter<Balances, DealWithFees>;85 type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;86 type FindAuthor = EthereumFindAuthor<Aura>;87}8889impl pallet_evm_migration::Config for Runtime {90 type RuntimeEvent = RuntimeEvent;91 type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;92}9394parameter_types! {95 pub const PostBlockAndTxnHashes: PostLogContent = PostLogContent::BlockAndTxnHashes;96}9798impl pallet_ethereum::Config for Runtime {99 type RuntimeEvent = RuntimeEvent;100 type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;101 type PostLogContent = PostBlockAndTxnHashes;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 RuntimeEvent = RuntimeEvent;118 type ContractAddress = HelpersContractAddress;119 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;120}121122impl pallet_evm_coder_substrate::Config for Runtime {}123124impl pallet_evm_transaction_payment::Config for Runtime {125 type EvmSponsorshipHandler = EvmSponsorshipHandler;126}