123use crate::{Module, Trait};45use pallet_contracts::{6 ContractAddressFor, TrieId, TrieIdGenerator,7};89use frame_support::{10 impl_outer_origin, parameter_types,11 weights::{12 13 Weight, IdentityFee,14 },15};16use frame_system as system;17use transaction_payment;18use sp_core::H256;19use sp_runtime::{20 testing::Header,21 traits::{BlakeTwo256, IdentityLookup, Saturating},22 Perbill,23};24pub use pallet_balances;2526impl_outer_origin! {27 pub enum Origin for Test {}28}2930313233#[derive(Clone, Eq, PartialEq)]34pub struct Test;35parameter_types! {36 pub const BlockHashCount: u64 = 250;37 pub const MaximumBlockWeight: Weight = 1024;38 pub const MaximumBlockLength: u32 = 2 * 1024;39 pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);40 pub MaximumExtrinsicWeight: Weight = AvailableBlockRatio::get()41 .saturating_sub(Perbill::from_percent(10)) * MaximumBlockWeight::get();42}4344impl system::Trait for Test {45 type BaseCallFilter = ();46 type Origin = Origin;47 type Call = ();48 type Index = u64;49 type BlockNumber = u64;50 type Hash = H256;51 type Hashing = BlakeTwo256;52 type AccountId = u64;53 type Lookup = IdentityLookup<Self::AccountId>;54 type Header = Header;55 type Event = ();56 type BlockHashCount = BlockHashCount;57 type MaximumBlockWeight = MaximumBlockWeight;58 type DbWeight = ();59 type BlockExecutionWeight = ();60 type ExtrinsicBaseWeight = ();61 type MaximumExtrinsicWeight = MaximumBlockWeight;62 type MaximumBlockLength = MaximumBlockLength;63 type AvailableBlockRatio = AvailableBlockRatio;64 type Version = ();65 type PalletInfo = ();66 type AccountData = pallet_balances::AccountData<u64>;67 type OnNewAccount = ();68 type OnKilledAccount = ();69 type SystemWeightInfo = ();70}7172parameter_types! {73 pub const ExistentialDeposit: u64 = 1;74 pub const MaxLocks: u32 = 50;75}7677type System = frame_system::Module<Test>;78impl pallet_balances::Trait for Test {79 type AccountStore = System;80 type Balance = u64;81 type DustRemoval = ();82 type Event = ();83 type ExistentialDeposit = ExistentialDeposit;84 type WeightInfo = ();85 type MaxLocks = MaxLocks;86}8788parameter_types! {89 pub const TransactionByteFee: u64 = 1;90}91impl transaction_payment::Trait for Test {92 type Currency = pallet_balances::Module<Test>;93 type OnTransactionPayment = ();94 type TransactionByteFee = TransactionByteFee;95 type WeightToFee = IdentityFee<u64>;96 type FeeMultiplierUpdate = ();97}9899100parameter_types! {101 pub const MinimumPeriod: u64 = 1;102}103impl pallet_timestamp::Trait for Test {104 type Moment = u64;105 type OnTimestampSet = ();106 type MinimumPeriod = MinimumPeriod;107 type WeightInfo = ();108}109110type Timestamp = pallet_timestamp::Module<Test>;111type Randomness = pallet_randomness_collective_flip::Module<Test>;112113parameter_types! {114 pub const TombstoneDeposit: u64 = 1;115 pub const RentByteFee: u64 = 1;116 pub const RentDepositOffset: u64 = 1;117 pub const SurchargeReward: u64 = 1;118}119120pub struct DummyTrieIdGenerator;121impl TrieIdGenerator<u64> for DummyTrieIdGenerator {122 fn trie_id(account_id: &u64) -> TrieId {123 let new_seed = *account_id + 1;124 let mut res = vec![];125 res.extend_from_slice(&new_seed.to_le_bytes());126 res.extend_from_slice(&account_id.to_le_bytes());127 res128 }129}130131pub struct DummyContractAddressFor;132impl ContractAddressFor<H256, u64> for DummyContractAddressFor {133 fn contract_address_for(_code_hash: &H256, _data: &[u8], origin: &u64) -> u64 {134 *origin + 1135 }136}137138impl pallet_contracts::Trait for Test {139 type Time = Timestamp;140 type Randomness = Randomness;141 type Currency = pallet_balances::Module<Test>;142 type Event = ();143 type DetermineContractAddress = DummyContractAddressFor;144 type TrieIdGenerator = DummyTrieIdGenerator;145 type RentPayment = ();146 type SignedClaimHandicap = pallet_contracts::DefaultSignedClaimHandicap;147 type TombstoneDeposit = TombstoneDeposit;148 type StorageSizeOffset = pallet_contracts::DefaultStorageSizeOffset;149 type RentByteFee = RentByteFee;150 type RentDepositOffset = RentDepositOffset;151 type SurchargeReward = SurchargeReward;152 type MaxDepth = pallet_contracts::DefaultMaxDepth;153 type MaxValueSize = pallet_contracts::DefaultMaxValueSize;154 type WeightPrice = ();155}156157impl Trait for Test {158 type Event = ();159 type WeightInfo = ();160161}162pub type TemplateModule = Module<Test>;163164165166167pub fn new_test_ext() -> sp_io::TestExternalities {168 system::GenesisConfig::default()169 .build_storage::<Test>()170 .unwrap()171 .into()172}