git.delta.rocks / unique-network / refs/commits / 3c77c1e2ea04

difftreelog

source

runtime/common/config/ethereum.rs4.7 KiBsourcehistory
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 up_common::constants::*;1920pub type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;2122// Assuming slowest ethereum opcode is SSTORE, with gas price of 20000 as our worst case23// (contract, which only writes a lot of data),24// approximating on top of our real store write weight25parameter_types! {26	pub const WritesPerSecond: u64 = WEIGHT_REF_TIME_PER_SECOND / <Runtime as frame_system::Config>::DbWeight::get().write;27	pub const GasPerSecond: u64 = WritesPerSecond::get() * 20000;28	pub const WeightTimePerGas: u64 = WEIGHT_REF_TIME_PER_SECOND / GasPerSecond::get();2930	pub const WeightPerGas: Weight = Weight::from_ref_time(WeightTimePerGas::get());31}3233/// Limiting EVM execution to 50% of block for substrate users and management tasks34/// EVM transaction consumes more weight than substrate's, so we can't rely on them being35/// scheduled fairly36const EVM_DISPATCH_RATIO: Perbill = Perbill::from_percent(50);37parameter_types! {38	pub BlockGasLimit: U256 = U256::from((NORMAL_DISPATCH_RATIO * EVM_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT / WeightTimePerGas::get()).ref_time());39	pub PrecompilesValue: UniquePrecompiles<Runtime> = UniquePrecompiles::<_>::new();40}4142pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);43impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {44	fn find_author<'a, I>(digests: I) -> Option<H160>45	where46		I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,47	{48		if let Some(author_index) = F::find_author(digests) {49			let authority_id = Aura::authorities()[author_index as usize].clone();50			return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));51		}52		None53	}54}5556impl pallet_evm::Config for Runtime {57	type CrossAccountId = CrossAccountId;58	type EvmAddressMapping = pallet_evm::HashedAddressMapping<Self::Hashing>;59	type EvmBackwardsAddressMapping = fp_evm_mapping::MapBackwardsAddressTruncated;60	type BlockGasLimit = BlockGasLimit;61	type FeeCalculator = pallet_configuration::FeeCalculator<Self>;62	type GasWeightMapping = pallet_evm::FixedGasWeightMapping<Self>;63	type WeightPerGas = WeightPerGas;64	type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;65	type CallOrigin = EnsureAddressTruncated<Self>;66	type WithdrawOrigin = EnsureAddressTruncated<Self>;67	type AddressMapping = HashedAddressMapping<Self::Hashing>;68	type PrecompilesType = UniquePrecompiles<Self>;69	type PrecompilesValue = PrecompilesValue;70	type Currency = Balances;71	type RuntimeEvent = RuntimeEvent;72	type OnMethodCall = (73		pallet_evm_migration::OnMethodCall<Self>,74		pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,75		CollectionDispatchT<Self>,76		pallet_unique::eth::CollectionHelpersOnMethodCall<Self>,77	);78	type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;79	type ChainId = ChainId;80	type Runner = pallet_evm::runner::stack::Runner<Self>;81	type OnChargeTransaction = pallet_evm::EVMCurrencyAdapter<Balances, DealWithFees>;82	type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;83	type FindAuthor = EthereumFindAuthor<Aura>;84}8586impl pallet_evm_migration::Config for Runtime {87	type RuntimeEvent = RuntimeEvent;88	type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;89}9091impl pallet_ethereum::Config for Runtime {92	type RuntimeEvent = RuntimeEvent;93	type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;94}9596parameter_types! {97	// 0x842899ECF380553E8a4de75bF534cdf6fBF6404998	pub const HelpersContractAddress: H160 = H160([99		0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,100	]);101102	// 0x6c4e9fe1ae37a41e93cee429e8e1881abdcbb54f103	pub const EvmCollectionHelpersAddress: H160 = H160([104		0x6c, 0x4e, 0x9f, 0xe1, 0xae, 0x37, 0xa4, 0x1e, 0x93, 0xce, 0xe4, 0x29, 0xe8, 0xe1, 0x88, 0x1a, 0xbd, 0xcb, 0xb5, 0x4f,105	]);106}107108impl pallet_evm_contract_helpers::Config for Runtime {109	type RuntimeEvent = RuntimeEvent;110	type ContractAddress = HelpersContractAddress;111	type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;112}113114impl pallet_evm_coder_substrate::Config for Runtime {}115116impl pallet_evm_transaction_payment::Config for Runtime {117	type EvmSponsorshipHandler = EvmSponsorshipHandler;118}