1use super::moonbase_weights;
18use crate::{xcm_config::XcmExecutorConfig, OpenTechCommitteeInstance, TreasuryCouncilInstance};
19use crate::{AccountId, AssetId, Balances, Erc20XcmBridge, EvmForeignAssets, Runtime};
20use frame_support::parameter_types;
21use moonkit_xcm_primitives::location_matcher::{
22 Erc20PalletMatcher, ForeignAssetMatcher, SingleAddressMatcher,
23};
24use pallet_evm_precompile_author_mapping::AuthorMappingPrecompile;
25use pallet_evm_precompile_balances_erc20::{Erc20BalancesPrecompile, Erc20Metadata};
26use pallet_evm_precompile_batch::BatchPrecompile;
27use pallet_evm_precompile_blake2::Blake2F;
28use pallet_evm_precompile_bls12381::{
29 Bls12381G1Add, Bls12381G1MultiExp, Bls12381G2Add, Bls12381G2MultiExp, Bls12381MapG1,
30 Bls12381MapG2, Bls12381Pairing,
31};
32use pallet_evm_precompile_bn128::{Bn128Add, Bn128Mul, Bn128Pairing};
33use pallet_evm_precompile_call_permit::CallPermitPrecompile;
34use pallet_evm_precompile_collective::CollectivePrecompile;
35use pallet_evm_precompile_conviction_voting::ConvictionVotingPrecompile;
36use pallet_evm_precompile_crowdloan_rewards::CrowdloanRewardsPrecompile;
37use pallet_evm_precompile_gmp::GmpPrecompile;
38use pallet_evm_precompile_identity::IdentityPrecompile;
39use pallet_evm_precompile_modexp::Modexp;
40use pallet_evm_precompile_p256verify::P256Verify;
41use pallet_evm_precompile_parachain_staking::ParachainStakingPrecompile;
42use pallet_evm_precompile_preimage::PreimagePrecompile;
43use pallet_evm_precompile_proxy::{OnlyIsProxyAndProxy, ProxyPrecompile};
44use pallet_evm_precompile_randomness::RandomnessPrecompile;
45use pallet_evm_precompile_referenda::ReferendaPrecompile;
46use pallet_evm_precompile_registry::PrecompileRegistry;
47use pallet_evm_precompile_relay_encoder::RelayEncoderPrecompile;
48use pallet_evm_precompile_relay_verifier::RelayDataVerifierPrecompile;
49use pallet_evm_precompile_sha3fips::Sha3FIPS256;
50use pallet_evm_precompile_simple::{ECRecover, ECRecoverPublicKey, Identity, Ripemd160, Sha256};
51use pallet_evm_precompile_xcm::PalletXcmPrecompile;
52use pallet_evm_precompile_xcm_transactor::{
53 v1::XcmTransactorPrecompileV1, v2::XcmTransactorPrecompileV2, v3::XcmTransactorPrecompileV3,
54};
55use pallet_evm_precompile_xcm_utils::{AllExceptXcmExecute, XcmUtilsPrecompile};
56use pallet_evm_precompile_xtokens::XtokensPrecompile;
57use pallet_precompile_benchmarks::WeightInfo;
58use precompile_utils::precompile_set::*;
59
60parameter_types! {
61 pub P256VerifyWeight: frame_support::weights::Weight =
62 moonbase_weights::pallet_precompile_benchmarks::WeightInfo::<Runtime>::p256_verify();
63 pub AssetHubTransactor: crate::xcm_config::Transactors = crate::xcm_config::Transactors::AssetHub;
64}
65
66pub struct NativeErc20Metadata;
68
69impl Erc20Metadata for NativeErc20Metadata {
70 fn name() -> &'static str {
72 "DEV token"
73 }
74
75 fn symbol() -> &'static str {
77 "DEV"
78 }
79
80 fn decimals() -> u8 {
82 18
83 }
84
85 fn is_native_currency() -> bool {
88 true
89 }
90}
91
92pub const FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX: &[u8] = &[255u8; 4];
95pub const LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX: &[u8] = &[255u8, 255u8, 255u8, 254u8];
98
99pub const ERC20_BALANCES_PRECOMPILE: u64 = 2050;
101
102parameter_types! {
103 pub ForeignAssetPrefix: &'static [u8] = FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX;
104 pub LocalAssetPrefix: &'static [u8] = LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX;
105}
106
107type EthereumPrecompilesChecks = (AcceptDelegateCall, CallableByContract, CallableByPrecompile);
108
109type AssetIdToLocationManager = (EvmForeignAssets,);
112
113type SingleAddressMatch = SingleAddressMatcher<AccountId, ERC20_BALANCES_PRECOMPILE, Balances>;
115
116type ForeignAssetMatch = ForeignAssetMatcher<AccountId, AssetId, Runtime, AssetIdToLocationManager>;
118
119type Erc20Match = Erc20PalletMatcher<AccountId, Erc20XcmBridge>;
121
122#[precompile_utils::precompile_name_from_address]
123type MoonbasePrecompilesAt<R> = (
124 PrecompileAt<AddressU64<1>, ECRecover, EthereumPrecompilesChecks>,
127 PrecompileAt<AddressU64<2>, Sha256, EthereumPrecompilesChecks>,
128 PrecompileAt<AddressU64<3>, Ripemd160, EthereumPrecompilesChecks>,
129 PrecompileAt<AddressU64<4>, Identity, EthereumPrecompilesChecks>,
130 PrecompileAt<AddressU64<5>, Modexp, EthereumPrecompilesChecks>,
131 PrecompileAt<AddressU64<6>, Bn128Add, EthereumPrecompilesChecks>,
132 PrecompileAt<AddressU64<7>, Bn128Mul, EthereumPrecompilesChecks>,
133 PrecompileAt<AddressU64<8>, Bn128Pairing, EthereumPrecompilesChecks>,
134 PrecompileAt<AddressU64<9>, Blake2F, EthereumPrecompilesChecks>,
135 PrecompileAt<AddressU64<11>, Bls12381G1Add, EthereumPrecompilesChecks>,
137 PrecompileAt<AddressU64<12>, Bls12381G1MultiExp, EthereumPrecompilesChecks>,
138 PrecompileAt<AddressU64<13>, Bls12381G2Add, EthereumPrecompilesChecks>,
139 PrecompileAt<AddressU64<14>, Bls12381G2MultiExp, EthereumPrecompilesChecks>,
140 PrecompileAt<AddressU64<15>, Bls12381Pairing, EthereumPrecompilesChecks>,
141 PrecompileAt<AddressU64<16>, Bls12381MapG1, EthereumPrecompilesChecks>,
142 PrecompileAt<AddressU64<17>, Bls12381MapG2, EthereumPrecompilesChecks>,
143 PrecompileAt<AddressU64<256>, P256Verify<P256VerifyWeight>, EthereumPrecompilesChecks>,
145 PrecompileAt<
147 AddressU64<1024>,
148 Sha3FIPS256<Runtime, ()>,
149 (CallableByContract, CallableByPrecompile),
150 >,
151 RemovedPrecompileAt<AddressU64<1025>>, PrecompileAt<AddressU64<1026>, ECRecoverPublicKey, (CallableByContract, CallableByPrecompile)>,
153 RemovedPrecompileAt<AddressU64<1027>>, PrecompileAt<
156 AddressU64<2048>,
157 ParachainStakingPrecompile<R>,
158 (CallableByContract, CallableByPrecompile),
159 >,
160 PrecompileAt<
161 AddressU64<2049>,
162 CrowdloanRewardsPrecompile<R>,
163 (CallableByContract, CallableByPrecompile),
164 >,
165 PrecompileAt<
166 AddressU64<ERC20_BALANCES_PRECOMPILE>,
167 Erc20BalancesPrecompile<R, NativeErc20Metadata>,
168 (CallableByContract, CallableByPrecompile),
169 >,
170 RemovedPrecompileAt<AddressU64<2051>>, PrecompileAt<
172 AddressU64<2052>,
173 XtokensPrecompile<R>,
174 (
175 SubcallWithMaxNesting<1>,
176 CallableByContract,
177 CallableByPrecompile,
178 ),
179 >,
180 PrecompileAt<
181 AddressU64<2053>,
182 RelayEncoderPrecompile<R, AssetHubTransactor>,
183 (CallableByContract, CallableByPrecompile),
184 >,
185 PrecompileAt<
186 AddressU64<2054>,
187 XcmTransactorPrecompileV1<R>,
188 (
189 SubcallWithMaxNesting<1>,
190 CallableByContract,
191 CallableByPrecompile,
192 ),
193 >,
194 PrecompileAt<
195 AddressU64<2055>,
196 AuthorMappingPrecompile<R>,
197 (CallableByContract, CallableByPrecompile),
198 >,
199 PrecompileAt<
200 AddressU64<2056>,
201 BatchPrecompile<R>,
202 (
203 SubcallWithMaxNesting<2>,
204 CallableByPrecompile<OnlyFrom<AddressU64<2056>>>,
206 ),
207 >,
208 PrecompileAt<
209 AddressU64<2057>,
210 RandomnessPrecompile<R>,
211 (SubcallWithMaxNesting<0>, CallableByContract),
212 >,
213 PrecompileAt<
214 AddressU64<2058>,
215 CallPermitPrecompile<R>,
216 (SubcallWithMaxNesting<0>, CallableByContract),
217 >,
218 PrecompileAt<
219 AddressU64<2059>,
220 ProxyPrecompile<R>,
221 (
222 CallableByContract<OnlyIsProxyAndProxy<R>>,
223 SubcallWithMaxNesting<0>,
224 CallableByPrecompile<OnlyFrom<AddressU64<2056>>>,
226 ),
227 >,
228 PrecompileAt<
229 AddressU64<2060>,
230 XcmUtilsPrecompile<R, XcmExecutorConfig>,
231 CallableByContract<AllExceptXcmExecute<R, XcmExecutorConfig>>,
232 >,
233 PrecompileAt<
234 AddressU64<2061>,
235 XcmTransactorPrecompileV2<R>,
236 (
237 SubcallWithMaxNesting<1>,
238 CallableByContract,
239 CallableByPrecompile,
240 ),
241 >,
242 RemovedPrecompileAt<AddressU64<2062>>,
244 RemovedPrecompileAt<AddressU64<2063>>,
246 PrecompileAt<
247 AddressU64<2064>,
248 CollectivePrecompile<R, TreasuryCouncilInstance>,
249 (CallableByContract, CallableByPrecompile),
250 >,
251 PrecompileAt<
252 AddressU64<2065>,
253 ReferendaPrecompile<R, crate::governance::custom_origins::Origin>,
254 (CallableByContract, CallableByPrecompile),
255 >,
256 PrecompileAt<
257 AddressU64<2066>,
258 ConvictionVotingPrecompile<R>,
259 (CallableByContract, CallableByPrecompile),
260 >,
261 PrecompileAt<
262 AddressU64<2067>,
263 PreimagePrecompile<R>,
264 (CallableByContract, CallableByPrecompile),
265 >,
266 PrecompileAt<
267 AddressU64<2068>,
268 CollectivePrecompile<R, OpenTechCommitteeInstance>,
269 (CallableByContract, CallableByPrecompile),
270 >,
271 PrecompileAt<
272 AddressU64<2069>,
273 PrecompileRegistry<R>,
274 (CallableByContract, CallableByPrecompile),
275 >,
276 PrecompileAt<AddressU64<2070>, GmpPrecompile<R>, SubcallWithMaxNesting<0>>,
277 PrecompileAt<
278 AddressU64<2071>,
279 XcmTransactorPrecompileV3<R>,
280 (
281 SubcallWithMaxNesting<1>,
282 CallableByContract,
283 CallableByPrecompile,
284 ),
285 >,
286 PrecompileAt<
287 AddressU64<2072>,
288 IdentityPrecompile<R, crate::MaxAdditionalFields>,
289 (CallableByContract, CallableByPrecompile),
290 >,
291 PrecompileAt<
292 AddressU64<2073>,
293 RelayDataVerifierPrecompile<
294 R,
295 moonbase_weights::pallet_precompile_benchmarks::WeightInfo<Runtime>,
296 >,
297 (CallableByContract, CallableByPrecompile),
298 >,
299 PrecompileAt<
300 AddressU64<2074>,
301 PalletXcmPrecompile<R, (SingleAddressMatch, ForeignAssetMatch, Erc20Match)>,
302 (
303 CallableByContract,
304 CallableByPrecompile,
305 SubcallWithMaxNesting<1>,
306 ),
307 >,
308);
309
310pub type MoonbasePrecompiles<R> = PrecompileSetBuilder<
318 R,
319 (
320 PrecompilesInRangeInclusive<(AddressU64<1>, AddressU64<4095>), MoonbasePrecompilesAt<R>>,
322 ),
323>;