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