From 3b954cfa54cf7986f0815b605994a3585f7dad9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89lo=C3=AFs?= Date: Thu, 25 Jul 2024 12:31:23 +0200 Subject: [PATCH] EVM foreign assets (#2869) * Add call ethereumXcm.forceTransactAs (to create contracts from runtime) * add pallet-moonbeam-foreign-assets skeleton * inject solidity bytecode * add freeze/unfreeze calls * refactor foreign assets pallet: create evm module * implement all evm calls * encode create args * build contract initcode: support 0x prefix * fix ethereum-xcm rust tests * pallet moonbeam-foreign-assets: prepare rust tests * add pallet moonbeam-foreign-assets for moonbase runtime * disable creation of foreign assets from pallet asset manager * fix matcher, remove useless genericity * rustfmt * improve build script: support direct copy of hex calldata * improve solidity impl: disable transfer & approve when paused * refactor evm foreign pallet: create AssetStatus & rename types * forbid old AssetsIds (with filter) and rework freeze mechanism * fix rust compilation for pallet-moonbeam-foreign-assets alone * fix: calldata need hex bytecode * wip * Revert "fix: calldata need hex bytecode" This reverts commit 67fc5bea6f104f749b5ae14519a16a50d410cb2f. * recompile solidity contract with solc 0.8.26+commit8a97fa7a * rust tests: fix pov ratio and storage ratio * fix rust tests compilation * fix constructor args encoding * test freeze/unfreeze * rewrite rust moonbase test asset_can_be_registered * estimate crate gas limit with manual binary search * determine gas limit for freeze/unfreeze * use branch moonbeam-polkadot-v1.11.0 * add calls force_burn and force_mint @ define gas limit for mint/burn * add transfer call * fix benchmarks compilation * add feature insecure_zero_ed for new pallet rust tests * improve benchmarks: create max foreign assets for worst case scenario * create weight info fns for freeze/unfreeze * add foreign asset migrator precompile * fix tracing compilation * add EvmForeignassets to CurrencyIdToLocation convertion * remove useless calls and rework rust tests * rustfmt * fix copyright: new code should be own by MBF * AssetsTransactors: for some reason Erc20XcmBridge should be at the end * fix moonbase rust integration tests * allow FastGeneralAdmin & 5/9 techCommittee to manage evm foreign assets * rustfmt * rename some fns/events and remove unused code * ticker -> symbol * change base implementation of registerForeignAsset() * re-arrange tests in test-assets (WIP) * review suggestions * create v4 locations for foreign assets testing * basic testing for evm foreign assets pallet * ForeignAssetTypeChanged -> ForeignAssetXcmLocationChanged * mockAssetBalance wip * fix mockAssetBalance * restore old foreign asset helpers * allow creation of old foreign assets * fix imports * use old foreign assets for xcm fees runtime api tests * remove Mytoken.sol (fail to compile on CI) and use parseAbi instead * fix some ts tests * fix more ts tests * remove test specific to substrate assets mechanism (is_sufficient) * fix ts imports * prettier * remove unused imports * prettier again * prettier * prettier --------- Co-authored-by: Gonza Montiel --- Cargo.lock | 675 ++++++++++-------- Cargo.toml | 10 +- pallets/asset-manager/src/lib.rs | 4 +- pallets/asset-manager/src/tests.rs | 2 +- pallets/ethereum-xcm/src/lib.rs | 46 +- pallets/ethereum-xcm/src/mock.rs | 1 + pallets/ethereum-xcm/src/tests/v1/eip1559.rs | 2 +- pallets/ethereum-xcm/src/tests/v1/eip2930.rs | 2 +- pallets/ethereum-xcm/src/tests/v1/legacy.rs | 2 +- pallets/ethereum-xcm/src/tests/v2.rs | 2 +- pallets/moonbeam-foreign-assets/Cargo.toml | 62 ++ pallets/moonbeam-foreign-assets/build.rs | 45 ++ .../resources/foreign_erc20.sol | 87 +++ .../resources/foreign_erc20_initcode.bin | Bin 0 -> 11455 bytes .../resources/foreign_erc20_initcode.hex | 1 + .../moonbeam-foreign-assets/src/benchmarks.rs | 127 ++++ pallets/moonbeam-foreign-assets/src/evm.rs | 369 ++++++++++ pallets/moonbeam-foreign-assets/src/lib.rs | 513 +++++++++++++ pallets/moonbeam-foreign-assets/src/mock.rs | 237 ++++++ pallets/moonbeam-foreign-assets/src/tests.rs | 212 ++++++ .../moonbeam-foreign-assets/src/weights.rs | 179 +++++ precompiles/foreign-asset-migrator/Cargo.toml | 76 ++ precompiles/foreign-asset-migrator/src/lib.rs | 213 ++++++ primitives/xcm/src/ethereum_xcm.rs | 59 +- .../src/impl_moonbeam_xcm_call_tracing.rs | 3 +- runtime/common/src/impl_xcm_evm_runner.rs | 54 ++ runtime/moonbase/Cargo.toml | 3 + runtime/moonbase/src/asset_config.rs | 6 +- runtime/moonbase/src/lib.rs | 2 + runtime/moonbase/src/precompiles.rs | 2 + runtime/moonbase/src/xcm_config.rs | 57 +- runtime/moonbase/tests/common/mod.rs | 51 +- runtime/moonbase/tests/integration_test.rs | 303 +++++--- runtime/moonbase/tests/xcm_mock/parachain.rs | 1 + runtime/moonbeam/src/lib.rs | 3 + runtime/moonbeam/tests/xcm_mock/parachain.rs | 1 + runtime/moonriver/src/lib.rs | 1 + runtime/moonriver/tests/xcm_mock/parachain.rs | 1 + test/helpers/assets.ts | 153 +++- test/helpers/xcm.ts | 48 +- .../test-assets/test-assets-destroy.ts | 69 -- .../test-assets/test-assets-drain-asset.ts | 123 ---- .../test-assets/test-assets-drain-both.ts | 4 +- .../test-assets/test-assets-insufficients.ts | 12 +- .../test-assets/test-assets-transfer.ts | 4 +- .../test-assets/test-change-existing-asset.ts | 73 -- .../test-assets/test-destroy-foreign-asset.ts | 75 -- .../test-assets/test-foreign-asset.ts | 34 - .../test-foreign-assets-balances.ts | 32 + ...test-foreign-assets-change-xcm-location.ts | 56 ++ .../test-assets/test-foreign-assets-create.ts | 71 ++ .../moonbase/test-assets/test-remove-asset.ts | 66 -- .../test-maintenance-filter.ts | 4 +- .../test-maintenance-filter2.ts | 4 +- .../test-precompile-assets-erc20-low-level.ts | 6 +- .../test-precompile-assets-erc20.ts | 4 +- .../test-precompile-assets-erc20a.ts | 4 +- .../test-precompile-assets-erc20b.ts | 4 +- .../test-precompile-assets-erc20c.ts | 4 +- .../test-precompile-assets-erc20d.ts | 4 +- .../test-precompile-assets-erc20e.ts | 4 +- .../test-precompile-assets-erc20f.ts | 4 +- .../test-precompile-pallet-xcm.ts | 4 +- .../test-precompile-xcm-transactor.ts | 4 +- .../test-precompile-xcm-transactor10.ts | 4 +- .../test-precompile-xcm-transactor11.ts | 4 +- .../test-precompile-xcm-transactor12.ts | 4 +- .../test-precompile-xcm-transactor2.ts | 4 +- .../test-precompile-xcm-transactor3.ts | 4 +- .../test-precompile-xcm-transactor6.ts | 4 +- .../test-precompile-xcm-transactor7.ts | 4 +- .../test-precompile-xcm-transactor8.ts | 4 +- .../test-mock-dmp-asset-transfer.ts | 6 +- .../test-mock-dmp-error-and-appendix-1.ts | 6 +- .../test-mock-dmp-error-and-appendix-2.ts | 6 +- .../test-mock-dmp-error-and-appendix-3.ts | 6 +- .../test-mock-dmp-error-and-appendix-4.ts | 6 +- .../test-mock-dmp-error-and-appendix-5.ts | 6 +- .../test-mock-dmp-error-and-appendix-6.ts | 6 +- .../test-mock-hrmp-asset-transfer-1.ts | 6 +- .../test-mock-hrmp-asset-transfer-2.ts | 12 +- .../test-mock-hrmp-asset-transfer-3.ts | 12 +- .../test-mock-hrmp-asset-transfer-6.ts | 16 +- .../test-mock-hrmp-asset-transfer-8.ts | 12 +- .../test-mock-hrmp-transact-ethereum-3.ts | 6 +- .../test-mock-dmp-error-and-appendix-1.ts | 6 +- .../test-mock-dmp-error-and-appendix-2.ts | 6 +- .../test-mock-dmp-error-and-appendix-3.ts | 6 +- .../test-mock-dmp-error-and-appendix-4.ts | 6 +- .../test-mock-dmp-error-and-appendix-5.ts | 6 +- .../test-mock-dmp-error-and-appendix-6.ts | 6 +- .../test-mock-hrmp-asset-transfer-1.ts | 12 +- .../test-mock-hrmp-asset-transfer-2.ts | 12 +- .../test-mock-hrmp-asset-transfer-5.ts | 16 +- .../test-mock-hrmp-asset-transfer-6.ts | 12 +- .../test-xcm-v4/test-xcm-evm-with-dot.ts | 15 +- .../test-xcm-payment-api-transact-foreign.ts | 15 +- .../test-xcm-v4/test-xcm-payment-api.ts | 4 +- 98 files changed, 3417 insertions(+), 1127 deletions(-) create mode 100644 pallets/moonbeam-foreign-assets/Cargo.toml create mode 100644 pallets/moonbeam-foreign-assets/build.rs create mode 100644 pallets/moonbeam-foreign-assets/resources/foreign_erc20.sol create mode 100644 pallets/moonbeam-foreign-assets/resources/foreign_erc20_initcode.bin create mode 100644 pallets/moonbeam-foreign-assets/resources/foreign_erc20_initcode.hex create mode 100644 pallets/moonbeam-foreign-assets/src/benchmarks.rs create mode 100644 pallets/moonbeam-foreign-assets/src/evm.rs create mode 100644 pallets/moonbeam-foreign-assets/src/lib.rs create mode 100644 pallets/moonbeam-foreign-assets/src/mock.rs create mode 100644 pallets/moonbeam-foreign-assets/src/tests.rs create mode 100644 pallets/moonbeam-foreign-assets/src/weights.rs create mode 100644 precompiles/foreign-asset-migrator/Cargo.toml create mode 100644 precompiles/foreign-asset-migrator/src/lib.rs delete mode 100644 test/suites/dev/moonbase/test-assets/test-assets-destroy.ts delete mode 100644 test/suites/dev/moonbase/test-assets/test-assets-drain-asset.ts delete mode 100644 test/suites/dev/moonbase/test-assets/test-change-existing-asset.ts delete mode 100644 test/suites/dev/moonbase/test-assets/test-destroy-foreign-asset.ts delete mode 100644 test/suites/dev/moonbase/test-assets/test-foreign-asset.ts create mode 100644 test/suites/dev/moonbase/test-assets/test-foreign-assets-balances.ts create mode 100644 test/suites/dev/moonbase/test-assets/test-foreign-assets-change-xcm-location.ts create mode 100644 test/suites/dev/moonbase/test-assets/test-foreign-assets-create.ts delete mode 100644 test/suites/dev/moonbase/test-assets/test-remove-asset.ts diff --git a/Cargo.lock b/Cargo.lock index 76c522e51d..57d6139724 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -949,7 +949,7 @@ dependencies = [ [[package]] name = "binary-merkle-tree" version = "13.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "hash-db 0.16.0", "log", @@ -1182,7 +1182,7 @@ dependencies = [ [[package]] name = "bp-xcm-bridge-hub-router" version = "0.6.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "scale-info", @@ -1948,7 +1948,7 @@ dependencies = [ [[package]] name = "cumulus-client-cli" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "clap", "parity-scale-codec", @@ -1965,7 +1965,7 @@ dependencies = [ [[package]] name = "cumulus-client-collator" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cumulus-client-consensus-common", "cumulus-client-network", @@ -1988,7 +1988,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-common" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "cumulus-client-pov-recovery", @@ -2017,7 +2017,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-proposer" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "anyhow", "async-trait", @@ -2032,7 +2032,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-relay-chain" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "cumulus-client-consensus-common", @@ -2055,7 +2055,7 @@ dependencies = [ [[package]] name = "cumulus-client-network" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "cumulus-relay-chain-interface", @@ -2078,7 +2078,7 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" version = "0.1.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2102,7 +2102,7 @@ dependencies = [ [[package]] name = "cumulus-client-pov-recovery" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2126,7 +2126,7 @@ dependencies = [ [[package]] name = "cumulus-client-service" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cumulus-client-cli", "cumulus-client-collator", @@ -2163,7 +2163,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-dmp-queue" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cumulus-primitives-core", "frame-benchmarking", @@ -2181,7 +2181,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bytes", "cumulus-pallet-parachain-system-proc-macro", @@ -2216,7 +2216,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system-proc-macro" version = "0.6.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", @@ -2227,7 +2227,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcm" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -2243,7 +2243,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcmp-queue" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bounded-collections", "bp-xcm-bridge-hub-router", @@ -2268,7 +2268,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -2285,7 +2285,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2302,7 +2302,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" version = "0.2.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -2312,7 +2312,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-timestamp" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cumulus-primitives-core", "futures 0.3.30", @@ -2325,7 +2325,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-utility" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -2345,7 +2345,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-inprocess-interface" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2369,7 +2369,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2387,7 +2387,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-minimal-node" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "async-trait", @@ -2429,7 +2429,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-rpc-interface" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2468,7 +2468,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -3212,7 +3212,7 @@ dependencies = [ [[package]] name = "evm" version = "0.41.1" -source = "git+https://github.com/moonbeam-foundation/evm?branch=moonbeam-polkadot-v1.11.0#2252d2475749be22f3b3ae1926fcd02959783f40" +source = "git+https://github.com/moonbeam-foundation/evm?branch=moonbeam-polkadot-v1.11.0#5ebf882aa99ba449ecf01ba3c29a00ab05cffb17" dependencies = [ "auto_impl", "environmental", @@ -3232,7 +3232,7 @@ dependencies = [ [[package]] name = "evm-core" version = "0.41.0" -source = "git+https://github.com/moonbeam-foundation/evm?branch=moonbeam-polkadot-v1.11.0#2252d2475749be22f3b3ae1926fcd02959783f40" +source = "git+https://github.com/moonbeam-foundation/evm?branch=moonbeam-polkadot-v1.11.0#5ebf882aa99ba449ecf01ba3c29a00ab05cffb17" dependencies = [ "parity-scale-codec", "primitive-types", @@ -3243,7 +3243,7 @@ dependencies = [ [[package]] name = "evm-gasometer" version = "0.41.0" -source = "git+https://github.com/moonbeam-foundation/evm?branch=moonbeam-polkadot-v1.11.0#2252d2475749be22f3b3ae1926fcd02959783f40" +source = "git+https://github.com/moonbeam-foundation/evm?branch=moonbeam-polkadot-v1.11.0#5ebf882aa99ba449ecf01ba3c29a00ab05cffb17" dependencies = [ "environmental", "evm-core", @@ -3254,7 +3254,7 @@ dependencies = [ [[package]] name = "evm-runtime" version = "0.41.0" -source = "git+https://github.com/moonbeam-foundation/evm?branch=moonbeam-polkadot-v1.11.0#2252d2475749be22f3b3ae1926fcd02959783f40" +source = "git+https://github.com/moonbeam-foundation/evm?branch=moonbeam-polkadot-v1.11.0#5ebf882aa99ba449ecf01ba3c29a00ab05cffb17" dependencies = [ "auto_impl", "environmental", @@ -3372,7 +3372,7 @@ dependencies = [ [[package]] name = "fc-api" version = "1.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "async-trait", "fp-storage", @@ -3384,7 +3384,7 @@ dependencies = [ [[package]] name = "fc-consensus" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "async-trait", "fp-consensus", @@ -3400,7 +3400,7 @@ dependencies = [ [[package]] name = "fc-db" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "async-trait", "ethereum", @@ -3430,7 +3430,7 @@ dependencies = [ [[package]] name = "fc-mapping-sync" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "fc-db", "fc-storage", @@ -3453,7 +3453,7 @@ dependencies = [ [[package]] name = "fc-rpc" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "ethereum", "ethereum-types", @@ -3507,7 +3507,7 @@ dependencies = [ [[package]] name = "fc-rpc-core" version = "1.1.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "ethereum", "ethereum-types", @@ -3522,7 +3522,7 @@ dependencies = [ [[package]] name = "fc-storage" version = "1.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "ethereum", "ethereum-types", @@ -3699,7 +3699,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fork-tree" version = "12.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", ] @@ -3716,7 +3716,7 @@ dependencies = [ [[package]] name = "fp-account" version = "1.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "hex", "impl-serde 0.4.0", @@ -3734,7 +3734,7 @@ dependencies = [ [[package]] name = "fp-consensus" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "ethereum", "parity-scale-codec", @@ -3745,7 +3745,7 @@ dependencies = [ [[package]] name = "fp-ethereum" version = "1.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "ethereum", "ethereum-types", @@ -3757,7 +3757,7 @@ dependencies = [ [[package]] name = "fp-evm" version = "3.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "evm", "frame-support", @@ -3772,7 +3772,7 @@ dependencies = [ [[package]] name = "fp-rpc" version = "3.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "ethereum", "ethereum-types", @@ -3788,7 +3788,7 @@ dependencies = [ [[package]] name = "fp-self-contained" version = "1.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "frame-support", "parity-scale-codec", @@ -3800,7 +3800,7 @@ dependencies = [ [[package]] name = "fp-storage" version = "2.0.0" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "parity-scale-codec", "serde", @@ -3815,7 +3815,7 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "frame-support-procedural", @@ -3840,7 +3840,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "32.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "Inflector", "array-bytes 6.2.2", @@ -3890,7 +3890,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "13.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", @@ -3901,7 +3901,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -3918,7 +3918,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "aquamarine 0.3.3", "frame-support", @@ -3949,7 +3949,7 @@ dependencies = [ [[package]] name = "frame-metadata-hash-extension" version = "0.1.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "docify", @@ -3964,7 +3964,7 @@ dependencies = [ [[package]] name = "frame-support" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "aquamarine 0.5.0", "array-bytes 6.2.2", @@ -4005,7 +4005,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "23.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "Inflector", "cfg-expr", @@ -4024,7 +4024,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "10.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 3.1.0", @@ -4036,7 +4036,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "11.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "proc-macro2", "quote", @@ -4046,7 +4046,7 @@ dependencies = [ [[package]] name = "frame-system" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cfg-if", "docify", @@ -4066,7 +4066,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -4081,7 +4081,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "sp-api", @@ -4090,7 +4090,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "parity-scale-codec", @@ -6190,7 +6190,7 @@ dependencies = [ [[package]] name = "mmr-gadget" version = "29.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "log", @@ -6209,7 +6209,7 @@ dependencies = [ [[package]] name = "mmr-rpc" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -6368,6 +6368,7 @@ dependencies = [ "pallet-maintenance-mode", "pallet-message-queue", "pallet-migrations", + "pallet-moonbeam-foreign-assets", "pallet-moonbeam-lazy-migrations", "pallet-moonbeam-orbiters", "pallet-multisig", @@ -6398,6 +6399,7 @@ dependencies = [ "polkadot-parachain-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", + "precompile-foreign-asset-migrator", "precompile-utils", "rlp", "scale-info", @@ -8156,7 +8158,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" version = "10.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8195,7 +8197,7 @@ dependencies = [ [[package]] name = "pallet-asset-rate" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8210,7 +8212,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8228,7 +8230,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "29.1.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8320,7 +8322,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "frame-system", @@ -8336,7 +8338,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "frame-system", @@ -8350,7 +8352,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8374,7 +8376,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "aquamarine 0.5.0", "docify", @@ -8396,7 +8398,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "docify", "frame-benchmarking", @@ -8412,7 +8414,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "frame-system", @@ -8432,7 +8434,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "binary-merkle-tree", @@ -8457,7 +8459,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8475,7 +8477,7 @@ dependencies = [ [[package]] name = "pallet-broker" version = "0.6.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "frame-benchmarking", @@ -8494,7 +8496,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8513,7 +8515,7 @@ dependencies = [ [[package]] name = "pallet-collator-selection" version = "9.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8533,7 +8535,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8550,7 +8552,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "assert_matches", "frame-benchmarking", @@ -8589,7 +8591,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8607,7 +8609,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -8630,7 +8632,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -8644,7 +8646,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "29.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -8706,7 +8708,7 @@ dependencies = [ [[package]] name = "pallet-ethereum" version = "4.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "environmental", "ethereum", @@ -8761,7 +8763,7 @@ dependencies = [ [[package]] name = "pallet-evm" version = "6.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "environmental", "evm", @@ -8786,7 +8788,7 @@ dependencies = [ [[package]] name = "pallet-evm-chain-id" version = "1.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "frame-support", "frame-system", @@ -8881,7 +8883,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-blake2" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "fp-evm", ] @@ -8889,7 +8891,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-bn128" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "fp-evm", "sp-core", @@ -9021,7 +9023,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-dispatch" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "fp-evm", "frame-support", @@ -9098,7 +9100,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-modexp" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "fp-evm", "num", @@ -9344,7 +9346,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-sha3fips" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "fp-evm", "tiny-keccak", @@ -9353,7 +9355,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-simple" version = "2.0.0-dev" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "fp-evm", "ripemd", @@ -9363,7 +9365,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-storage-cleaner" version = "0.1.0" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "fp-evm", "frame-support", @@ -9533,7 +9535,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "docify", "frame-benchmarking", @@ -9552,7 +9554,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -9575,7 +9577,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "enumflags2", "frame-benchmarking", @@ -9593,7 +9595,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -9613,7 +9615,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -9646,7 +9648,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -9663,7 +9665,7 @@ dependencies = [ [[package]] name = "pallet-message-queue" version = "31.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "environmental", "frame-benchmarking", @@ -9702,7 +9704,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -9717,6 +9719,32 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-moonbeam-foreign-assets" +version = "0.1.0" +dependencies = [ + "ethereum-types", + "fp-evm", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex", + "log", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "parity-scale-codec", + "precompile-utils", + "precompile-utils-macro", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-executor", +] + [[package]] name = "pallet-moonbeam-lazy-migrations" version = "0.1.0" @@ -9760,7 +9788,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -9776,7 +9804,7 @@ dependencies = [ [[package]] name = "pallet-nis" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -9792,7 +9820,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "25.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "frame-system", @@ -9811,7 +9839,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -9831,7 +9859,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "23.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "pallet-nomination-pools", "parity-scale-codec", @@ -9842,7 +9870,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "frame-system", @@ -9859,7 +9887,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -9905,7 +9933,7 @@ dependencies = [ [[package]] name = "pallet-parameters" version = "0.1.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "docify", "frame-benchmarking", @@ -9943,7 +9971,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -9960,7 +9988,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10018,7 +10046,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10037,7 +10065,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10052,7 +10080,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "assert_matches", "frame-benchmarking", @@ -10094,7 +10122,7 @@ dependencies = [ [[package]] name = "pallet-root-testing" version = "4.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "frame-system", @@ -10109,7 +10137,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "29.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "docify", "frame-benchmarking", @@ -10127,7 +10155,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "frame-system", @@ -10149,7 +10177,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10166,7 +10194,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10184,7 +10212,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10207,7 +10235,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "11.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", @@ -10218,7 +10246,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "19.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "log", "sp-arithmetic", @@ -10227,7 +10255,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "14.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "sp-api", @@ -10237,7 +10265,7 @@ dependencies = [ [[package]] name = "pallet-state-trie-migration" version = "29.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10254,7 +10282,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "docify", "frame-benchmarking", @@ -10270,7 +10298,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "docify", "frame-benchmarking", @@ -10290,7 +10318,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10309,7 +10337,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "frame-system", @@ -10325,7 +10353,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "30.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -10341,7 +10369,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -10353,7 +10381,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "docify", "frame-benchmarking", @@ -10372,7 +10400,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10388,7 +10416,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10403,7 +10431,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10418,7 +10446,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bounded-collections", "frame-benchmarking", @@ -10442,7 +10470,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-benchmarking", "frame-support", @@ -10487,7 +10515,7 @@ dependencies = [ [[package]] name = "parachains-common" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-utility", @@ -10835,7 +10863,7 @@ checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" [[package]] name = "polkadot-approval-distribution" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "futures 0.3.30", @@ -10855,7 +10883,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "always-assert", "futures 0.3.30", @@ -10871,7 +10899,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "derive_more", "fatality", @@ -10894,7 +10922,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "fatality", @@ -10917,7 +10945,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cfg-if", "clap", @@ -10945,7 +10973,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "fatality", @@ -10967,7 +10995,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "scale-info", @@ -10979,7 +11007,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "derive_more", "fatality", @@ -11004,7 +11032,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -11018,7 +11046,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "futures-timer", @@ -11040,7 +11068,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "always-assert", "async-trait", @@ -11063,7 +11091,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "parity-scale-codec", @@ -11081,7 +11109,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "derive_more", @@ -11114,7 +11142,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "futures 0.3.30", @@ -11136,7 +11164,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "fatality", @@ -11156,7 +11184,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "polkadot-node-subsystem", @@ -11171,7 +11199,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "futures 0.3.30", @@ -11192,7 +11220,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "polkadot-node-metrics", @@ -11206,7 +11234,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "futures-timer", @@ -11223,7 +11251,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "fatality", "futures 0.3.30", @@ -11242,7 +11270,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "futures 0.3.30", @@ -11259,7 +11287,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-prospective-parachains" version = "6.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "fatality", @@ -11276,7 +11304,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "fatality", @@ -11294,7 +11322,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "always-assert", "array-bytes 6.2.2", @@ -11323,7 +11351,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "polkadot-node-primitives", @@ -11339,7 +11367,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-common" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cpu-time", "futures 0.3.30", @@ -11365,7 +11393,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "polkadot-node-metrics", @@ -11380,7 +11408,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "lazy_static", "log", @@ -11399,7 +11427,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bs58 0.5.1", "futures 0.3.30", @@ -11418,7 +11446,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -11444,7 +11472,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "bounded-vec", @@ -11467,7 +11495,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -11477,7 +11505,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "bitvec", @@ -11506,7 +11534,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "derive_more", @@ -11541,7 +11569,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "futures 0.3.30", @@ -11563,7 +11591,7 @@ dependencies = [ [[package]] name = "polkadot-parachain-primitives" version = "6.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bounded-collections", "derive_more", @@ -11580,7 +11608,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "hex-literal 0.4.1", @@ -11607,7 +11635,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "jsonrpsee", "mmr-rpc", @@ -11640,7 +11668,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitvec", "frame-benchmarking", @@ -11691,7 +11719,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bs58 0.5.1", "frame-benchmarking", @@ -11704,7 +11732,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bitflags 1.3.2", "bitvec", @@ -11753,7 +11781,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "bitvec", @@ -11875,7 +11903,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "arrayvec 0.7.4", "bitvec", @@ -11898,7 +11926,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -12061,10 +12089,43 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "precompile-foreign-asset-migrator" +version = "0.1.0" +dependencies = [ + "account", + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "hex-literal 0.3.4", + "libsecp256k1", + "log", + "num_enum 0.5.11", + "pallet-asset-manager", + "pallet-assets", + "pallet-balances", + "pallet-evm", + "pallet-moonbeam-foreign-assets", + "pallet-timestamp", + "parity-scale-codec", + "paste", + "precompile-utils", + "scale-info", + "serde", + "sha3", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "xcm-primitives 0.1.0", +] + [[package]] name = "precompile-utils" version = "0.1.0" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "derive_more", "environmental", @@ -12093,7 +12154,7 @@ dependencies = [ [[package]] name = "precompile-utils-macro" version = "0.1.0" -source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#fc64fd20c256bcd7ac328750087f7ae00713c585" +source = "git+https://github.com/moonbeam-foundation/frontier?branch=moonbeam-polkadot-v1.11.0#45d16ae4c8b32e26fdab8353b704fd59ea0ddb8c" dependencies = [ "case", "num_enum 0.7.2", @@ -12894,7 +12955,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "binary-merkle-tree", "bitvec", @@ -12995,7 +13056,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "polkadot-primitives", @@ -13291,7 +13352,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "23.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "log", "sp-core", @@ -13302,7 +13363,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "futures 0.3.30", @@ -13333,7 +13394,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "futures-timer", @@ -13355,7 +13416,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.33.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "sp-api", @@ -13370,7 +13431,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "docify", @@ -13397,7 +13458,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "11.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", @@ -13408,7 +13469,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.36.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "chrono", @@ -13452,7 +13513,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "fnv", "futures 0.3.30", @@ -13479,7 +13540,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.35.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "hash-db 0.16.0", "kvdb", @@ -13505,7 +13566,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.33.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "futures 0.3.30", @@ -13530,7 +13591,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "futures 0.3.30", @@ -13559,7 +13620,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "fork-tree", @@ -13595,7 +13656,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "jsonrpsee", @@ -13617,7 +13678,7 @@ dependencies = [ [[package]] name = "sc-consensus-beefy" version = "13.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "async-channel 1.9.0", @@ -13654,7 +13715,7 @@ dependencies = [ [[package]] name = "sc-consensus-beefy-rpc" version = "13.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "jsonrpsee", @@ -13673,7 +13734,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.33.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "fork-tree", "parity-scale-codec", @@ -13686,7 +13747,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.19.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "ahash 0.8.11", "array-bytes 6.2.2", @@ -13730,7 +13791,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.19.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "finality-grandpa", "futures 0.3.30", @@ -13750,7 +13811,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.35.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "assert_matches", "async-trait", @@ -13785,7 +13846,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.33.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "futures 0.3.30", @@ -13808,7 +13869,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.32.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "log", "parity-scale-codec", @@ -13832,7 +13893,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.29.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "polkavm", @@ -13846,7 +13907,7 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" version = "0.29.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "log", "polkavm", @@ -13857,7 +13918,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.29.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "anyhow", "cfg-if", @@ -13877,7 +13938,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.33.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "ansi_term", "futures 0.3.30", @@ -13894,7 +13955,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "25.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "parking_lot 0.12.3", @@ -13908,7 +13969,7 @@ dependencies = [ [[package]] name = "sc-mixnet" version = "0.4.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 4.2.0", "arrayvec 0.7.4", @@ -13937,7 +13998,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "async-channel 1.9.0", @@ -13988,7 +14049,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.33.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "bitflags 1.3.2", @@ -14006,7 +14067,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "ahash 0.8.11", "futures 0.3.30", @@ -14026,7 +14087,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.33.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "async-channel 1.9.0", @@ -14047,7 +14108,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.33.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "async-channel 1.9.0", @@ -14084,7 +14145,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.33.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "futures 0.3.30", @@ -14104,7 +14165,7 @@ dependencies = [ [[package]] name = "sc-network-types" version = "0.10.0-dev" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bs58 0.4.0", "libp2p-identity", @@ -14118,7 +14179,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "29.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "bytes", @@ -14153,7 +14214,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.17.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -14162,7 +14223,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "29.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "jsonrpsee", @@ -14194,7 +14255,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.33.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -14214,7 +14275,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "11.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "governor", @@ -14232,7 +14293,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "futures 0.3.30", @@ -14264,7 +14325,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.35.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "directories", @@ -14328,7 +14389,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.30.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "log", "parity-scale-codec", @@ -14339,7 +14400,7 @@ dependencies = [ [[package]] name = "sc-storage-monitor" version = "0.16.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "clap", "fs4", @@ -14352,7 +14413,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -14371,7 +14432,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "derive_more", "futures 0.3.30", @@ -14392,7 +14453,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "15.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "chrono", "futures 0.3.30", @@ -14412,7 +14473,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "ansi_term", "chrono", @@ -14442,7 +14503,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "11.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", @@ -14453,7 +14514,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "futures 0.3.30", @@ -14480,7 +14541,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "futures 0.3.30", @@ -14496,7 +14557,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "14.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-channel 1.9.0", "futures 0.3.30", @@ -15035,7 +15096,7 @@ dependencies = [ [[package]] name = "slot-range-helper" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "enumn", "parity-scale-codec", @@ -15229,7 +15290,7 @@ dependencies = [ [[package]] name = "sp-api" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "hash-db 0.16.0", "log", @@ -15251,7 +15312,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "15.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "Inflector", "blake2 0.10.6", @@ -15265,7 +15326,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "30.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "scale-info", @@ -15278,7 +15339,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "23.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "docify", "integer-sqrt", @@ -15311,7 +15372,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "scale-info", @@ -15323,7 +15384,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "sp-api", "sp-inherents", @@ -15333,7 +15394,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "log", @@ -15351,7 +15412,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.32.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "futures 0.3.30", @@ -15366,7 +15427,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.32.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "parity-scale-codec", @@ -15382,7 +15443,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.32.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "parity-scale-codec", @@ -15400,7 +15461,7 @@ dependencies = [ [[package]] name = "sp-consensus-beefy" version = "13.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "lazy_static", "parity-scale-codec", @@ -15420,7 +15481,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "13.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "finality-grandpa", "log", @@ -15437,7 +15498,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.32.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "scale-info", @@ -15448,7 +15509,7 @@ dependencies = [ [[package]] name = "sp-core" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "bandersnatch_vrfs", @@ -15495,7 +15556,7 @@ dependencies = [ [[package]] name = "sp-crypto-ec-utils" version = "0.10.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -15515,7 +15576,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "blake2b_simd", "byteorder", @@ -15528,7 +15589,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "quote", "sp-crypto-hashing", @@ -15538,7 +15599,7 @@ dependencies = [ [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "kvdb", "parking_lot 0.12.3", @@ -15547,7 +15608,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "proc-macro2", "quote", @@ -15557,7 +15618,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.25.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "environmental", "parity-scale-codec", @@ -15567,7 +15628,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.8.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "scale-info", @@ -15579,7 +15640,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -15592,7 +15653,7 @@ dependencies = [ [[package]] name = "sp-io" version = "30.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bytes", "ed25519-dalek 2.1.1", @@ -15618,7 +15679,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "31.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "sp-core", "sp-runtime", @@ -15628,7 +15689,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.34.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "parking_lot 0.12.3", @@ -15639,7 +15700,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "thiserror", "zstd 0.12.4", @@ -15648,7 +15709,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.6.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-metadata", "parity-scale-codec", @@ -15658,7 +15719,7 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.4.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "scale-info", @@ -15669,7 +15730,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "ckb-merkle-mountain-range", "log", @@ -15686,7 +15747,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "scale-info", @@ -15699,7 +15760,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "sp-api", "sp-core", @@ -15709,7 +15770,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "backtrace", "lazy_static", @@ -15719,7 +15780,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "rustc-hash", "serde", @@ -15729,7 +15790,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "31.0.1" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "docify", "either", @@ -15753,7 +15814,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "24.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -15772,7 +15833,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "17.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "Inflector", "expander 2.0.0", @@ -15785,7 +15846,7 @@ dependencies = [ [[package]] name = "sp-session" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "scale-info", @@ -15799,7 +15860,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -15812,7 +15873,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.35.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "hash-db 0.16.0", "log", @@ -15832,7 +15893,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "10.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "aes-gcm", "curve25519-dalek 4.1.2", @@ -15856,12 +15917,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" [[package]] name = "sp-storage" version = "19.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "impl-serde 0.4.0", "parity-scale-codec", @@ -15873,7 +15934,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "parity-scale-codec", @@ -15885,7 +15946,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "16.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "tracing", @@ -15896,7 +15957,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "sp-api", "sp-runtime", @@ -15905,7 +15966,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "26.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "async-trait", "parity-scale-codec", @@ -15919,7 +15980,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "29.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "ahash 0.8.11", "hash-db 0.16.0", @@ -15942,7 +16003,7 @@ dependencies = [ [[package]] name = "sp-version" version = "29.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "impl-serde 0.4.0", "parity-scale-codec", @@ -15959,7 +16020,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "13.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -15970,7 +16031,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "20.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -15982,7 +16043,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -16172,7 +16233,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staging-parachain-info" version = "0.7.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -16186,7 +16247,7 @@ dependencies = [ [[package]] name = "staging-xcm" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "bounded-collections", @@ -16204,7 +16265,7 @@ dependencies = [ [[package]] name = "staging-xcm-builder" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "frame-system", @@ -16226,7 +16287,7 @@ dependencies = [ [[package]] name = "staging-xcm-executor" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "environmental", "frame-benchmarking", @@ -16379,7 +16440,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.4.7" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "hmac 0.12.1", "pbkdf2 0.12.2", @@ -16404,7 +16465,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" [[package]] name = "substrate-fixed" @@ -16419,7 +16480,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "28.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.30", @@ -16438,7 +16499,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "hyper", "log", @@ -16450,7 +16511,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "27.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -16467,7 +16528,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "async-trait", @@ -16494,7 +16555,7 @@ dependencies = [ [[package]] name = "substrate-test-runtime" version = "2.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "frame-executive", @@ -16538,7 +16599,7 @@ dependencies = [ [[package]] name = "substrate-test-runtime-client" version = "2.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "futures 0.3.30", "sc-block-builder", @@ -16566,7 +16627,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "17.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "array-bytes 6.2.2", "build-helper", @@ -17157,7 +17218,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "coarsetime", "polkadot-primitives", @@ -17168,7 +17229,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "expander 2.0.0", "proc-macro-crate 3.1.0", @@ -18027,7 +18088,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "binary-merkle-tree", "bitvec", @@ -18134,7 +18195,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "polkadot-primitives", @@ -18536,7 +18597,7 @@ dependencies = [ [[package]] name = "xcm-fee-payment-runtime-api" version = "0.1.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "parity-scale-codec", @@ -18594,7 +18655,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "Inflector", "proc-macro2", @@ -18605,7 +18666,7 @@ dependencies = [ [[package]] name = "xcm-simulator" version = "7.0.0" -source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#a4592a4d8b6a79d17651d9803e29c0851eca2f82" +source = "git+https://github.com/moonbeam-foundation/polkadot-sdk?branch=moonbeam-polkadot-v1.11.0#08968b280245b53ce790f9234289960ace6bbaee" dependencies = [ "frame-support", "parity-scale-codec", diff --git a/Cargo.toml b/Cargo.toml index 92d3b9aa16..0578bfc1bf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ members = [ "pallets/asset-manager", "pallets/erc20-xcm-bridge", "pallets/ethereum-xcm", + "pallets/moonbeam-foreign-assets", "pallets/moonbeam-lazy-migrations", "pallets/moonbeam-orbiters", "pallets/moonbeam-xcm-benchmarks", @@ -24,6 +25,7 @@ members = [ "precompiles/collective", "precompiles/conviction-voting", "precompiles/crowdloan-rewards", + "precompiles/foreign-asset-migrator", "precompiles/gmp", "precompiles/identity", "precompiles/parachain-staking", @@ -75,9 +77,9 @@ moonbeam-xcm-benchmarks = { path = "pallets/moonbeam-xcm-benchmarks", default-fe pallet-asset-manager = { path = "pallets/asset-manager", default-features = false } pallet-erc20-xcm-bridge = { path = "pallets/erc20-xcm-bridge", default-features = false } pallet-ethereum-xcm = { path = "pallets/ethereum-xcm", default-features = false } - - +pallet-moonbeam-foreign-assets = { path = "pallets/moonbeam-foreign-assets", default-features = false } pallet-moonbeam-lazy-migrations = { path = "pallets/moonbeam-lazy-migrations", default-features = false } + pallet-evm-precompile-author-mapping = { path = "precompiles/author-mapping", default-features = false } pallet-evm-precompile-balances-erc20 = { path = "precompiles/balances-erc20", default-features = false } pallet-evm-precompile-batch = { path = "precompiles/batch", default-features = false } @@ -105,6 +107,7 @@ pallet-parachain-staking = { path = "pallets/parachain-staking", default-feature pallet-precompile-benchmarks = { path = "pallets/precompile-benchmarks", default-features = false } pallet-proxy-genesis-companion = { path = "pallets/proxy-genesis-companion", default-features = false } pallet-xcm-transactor = { path = "pallets/xcm-transactor", default-features = false } +precompile-foreign-asset-migrator = { path = "precompiles/foreign-asset-migrator", default-features = false } xcm-primitives = { path = "primitives/xcm", default-features = false } pallet-crowdloan-rewards = { git = "https://github.com/moonbeam-foundation/crowdloan-rewards", branch = "moonbeam-polkadot-v1.11.0", default-features = false } @@ -257,9 +260,10 @@ pallet-evm-precompile-simple = { git = "https://github.com/moonbeam-foundation/f pallet-evm-precompile-storage-cleaner = { git = "https://github.com/moonbeam-foundation/frontier", branch = "moonbeam-polkadot-v1.11.0", default-features = false } precompile-utils = { git = "https://github.com/moonbeam-foundation/frontier", branch = "moonbeam-polkadot-v1.11.0", default-features = false } +precompile-utils-macro = { git = "https://github.com/moonbeam-foundation/frontier", branch = "moonbeam-polkadot-v1.11.0", default-features = false } -# Frontier (client) +# Frontier (client) fc-consensus = { git = "https://github.com/moonbeam-foundation/frontier", branch = "moonbeam-polkadot-v1.11.0" } fc-db = { git = "https://github.com/moonbeam-foundation/frontier", branch = "moonbeam-polkadot-v1.11.0" } fc-api = { git = "https://github.com/moonbeam-foundation/frontier", branch = "moonbeam-polkadot-v1.11.0" } diff --git a/pallets/asset-manager/src/lib.rs b/pallets/asset-manager/src/lib.rs index f72b6ac543..e7ee00c3e9 100644 --- a/pallets/asset-manager/src/lib.rs +++ b/pallets/asset-manager/src/lib.rs @@ -182,7 +182,7 @@ pub mod pallet { units_per_second: u128, }, /// Changed the xcm type mapping for a given asset id - ForeignAssetTypeChanged { + ForeignAssetXcmLocationChanged { asset_id: T::AssetId, new_asset_type: T::ForeignAssetType, }, @@ -367,7 +367,7 @@ pub mod pallet { AssetTypeUnitsPerSecond::::insert(&new_asset_type, units); } - Self::deposit_event(Event::ForeignAssetTypeChanged { + Self::deposit_event(Event::ForeignAssetXcmLocationChanged { asset_id, new_asset_type, }); diff --git a/pallets/asset-manager/src/tests.rs b/pallets/asset-manager/src/tests.rs index 71bffc3c16..dee27f5229 100644 --- a/pallets/asset-manager/src/tests.rs +++ b/pallets/asset-manager/src/tests.rs @@ -206,7 +206,7 @@ fn test_root_can_change_asset_id_type() { asset_type: MockAssetType::MockAsset(1), units_per_second: 200, }, - crate::Event::ForeignAssetTypeChanged { + crate::Event::ForeignAssetXcmLocationChanged { asset_id: 1, new_asset_type: MockAssetType::MockAsset(2), }, diff --git a/pallets/ethereum-xcm/src/lib.rs b/pallets/ethereum-xcm/src/lib.rs index a5f20747f5..a5369b440f 100644 --- a/pallets/ethereum-xcm/src/lib.rs +++ b/pallets/ethereum-xcm/src/lib.rs @@ -104,6 +104,8 @@ pub mod pallet { type EnsureProxy: EnsureProxy; /// The origin that is allowed to resume or suspend the XCM to Ethereum executions. type ControllerOrigin: EnsureOrigin; + /// An origin that can submit a create tx type + type ForceOrigin: EnsureOrigin; } #[pallet::pallet] @@ -160,7 +162,7 @@ pub mod pallet { } } ); - Self::validate_and_apply(source, xcm_transaction) + Self::validate_and_apply(source, xcm_transaction, false, None) } /// Xcm Transact an Ethereum transaction through proxy. @@ -202,7 +204,7 @@ pub mod pallet { error: sp_runtime::DispatchError::Other(e), })?; - Self::validate_and_apply(transact_as, xcm_transaction) + Self::validate_and_apply(transact_as, xcm_transaction, false, None) } /// Suspends all Ethereum executions from XCM. @@ -228,6 +230,39 @@ pub mod pallet { Ok(()) } + + /// Xcm Transact an Ethereum transaction, but allow to force the caller and create address. + /// This call should be restricted (callable only by the runtime or governance). + /// Weight: Gas limit plus the db reads involving the suspension and proxy checks + #[pallet::weight({ + let without_base_extrinsic_weight = false; + ::GasWeightMapping::gas_to_weight({ + match xcm_transaction { + EthereumXcmTransaction::V1(v1_tx) => v1_tx.gas_limit.unique_saturated_into(), + EthereumXcmTransaction::V2(v2_tx) => v2_tx.gas_limit.unique_saturated_into() + } + }, without_base_extrinsic_weight).saturating_add(T::DbWeight::get().reads(1)) + })] + pub fn force_transact_as( + origin: OriginFor, + transact_as: H160, + xcm_transaction: EthereumXcmTransaction, + force_create_address: Option, + ) -> DispatchResultWithPostInfo { + T::ForceOrigin::ensure_origin(origin)?; + ensure!( + !EthereumXcmSuspended::::get(), + DispatchErrorWithPostInfo { + error: Error::::EthereumXcmExecutionSuspended.into(), + post_info: PostDispatchInfo { + actual_weight: Some(T::DbWeight::get().reads(1)), + pays_fee: Pays::Yes + } + } + ); + + Self::validate_and_apply(transact_as, xcm_transaction, true, force_create_address) + } } } @@ -243,6 +278,8 @@ impl Pallet { fn validate_and_apply( source: H160, xcm_transaction: EthereumXcmTransaction, + allow_create: bool, + maybe_force_create_address: Option, ) -> DispatchResultWithPostInfo { // The lack of a real signature where different callers with the // same nonce are providing identical transaction payloads results in a collision and @@ -253,7 +290,7 @@ impl Pallet { let error_weight = T::DbWeight::get().reads(1); let transaction: Option = - xcm_transaction.into_transaction_v2(current_nonce, T::ChainId::get()); + xcm_transaction.into_transaction_v2(current_nonce, T::ChainId::get(), allow_create); if let Some(transaction) = transaction { let transaction_data: TransactionData = (&transaction).into(); @@ -300,7 +337,8 @@ impl Pallet { // transaction on chain - we increase the global nonce. >::put(current_nonce.saturating_add(U256::one())); - let (dispatch_info, _) = T::ValidatedTransaction::apply(source, transaction)?; + let (dispatch_info, _) = + T::ValidatedTransaction::apply(source, transaction, maybe_force_create_address)?; Ok(dispatch_info) } else { Err(sp_runtime::DispatchErrorWithPostInfo { diff --git a/pallets/ethereum-xcm/src/mock.rs b/pallets/ethereum-xcm/src/mock.rs index 2c6260a3f0..82d87a55d6 100644 --- a/pallets/ethereum-xcm/src/mock.rs +++ b/pallets/ethereum-xcm/src/mock.rs @@ -284,6 +284,7 @@ impl crate::Config for Test { type ReservedXcmpWeight = ReservedXcmpWeight; type EnsureProxy = EthereumXcmEnsureProxy; type ControllerOrigin = EnsureRoot; + type ForceOrigin = EnsureRoot; } impl fp_self_contained::SelfContainedCall for RuntimeCall { diff --git a/pallets/ethereum-xcm/src/tests/v1/eip1559.rs b/pallets/ethereum-xcm/src/tests/v1/eip1559.rs index 6dd0103c7c..a6f62c88a3 100644 --- a/pallets/ethereum-xcm/src/tests/v1/eip1559.rs +++ b/pallets/ethereum-xcm/src/tests/v1/eip1559.rs @@ -150,7 +150,7 @@ fn test_transact_xcm_evm_call_works() { input: hex::decode(CONTRACT).unwrap(), } .sign(&alice.private_key, None); - assert_ok!(Ethereum::execute(alice.address, &t, None,)); + assert_ok!(Ethereum::execute(alice.address, &t, None, None)); let contract_address = hex::decode("32dcab0ef3fb2de2fce1d2e0799d36239671f04a").unwrap(); let foo = hex::decode("c2985578").unwrap(); diff --git a/pallets/ethereum-xcm/src/tests/v1/eip2930.rs b/pallets/ethereum-xcm/src/tests/v1/eip2930.rs index d061b72a0c..380373b65c 100644 --- a/pallets/ethereum-xcm/src/tests/v1/eip2930.rs +++ b/pallets/ethereum-xcm/src/tests/v1/eip2930.rs @@ -162,7 +162,7 @@ fn test_transact_xcm_evm_call_works() { input: hex::decode(CONTRACT).unwrap(), } .sign(&alice.private_key, None); - assert_ok!(Ethereum::execute(alice.address, &t, None,)); + assert_ok!(Ethereum::execute(alice.address, &t, None, None)); let contract_address = hex::decode("32dcab0ef3fb2de2fce1d2e0799d36239671f04a").unwrap(); let foo = hex::decode("c2985578").unwrap(); diff --git a/pallets/ethereum-xcm/src/tests/v1/legacy.rs b/pallets/ethereum-xcm/src/tests/v1/legacy.rs index 55528fc16b..de3de3d6f8 100644 --- a/pallets/ethereum-xcm/src/tests/v1/legacy.rs +++ b/pallets/ethereum-xcm/src/tests/v1/legacy.rs @@ -159,7 +159,7 @@ fn test_transact_xcm_evm_call_works() { input: hex::decode(CONTRACT).unwrap(), } .sign(&alice.private_key); - assert_ok!(Ethereum::execute(alice.address, &t, None,)); + assert_ok!(Ethereum::execute(alice.address, &t, None, None)); let contract_address = hex::decode("32dcab0ef3fb2de2fce1d2e0799d36239671f04a").unwrap(); let foo = hex::decode("c2985578").unwrap(); diff --git a/pallets/ethereum-xcm/src/tests/v2.rs b/pallets/ethereum-xcm/src/tests/v2.rs index 43b48fcdcf..c928f5d033 100644 --- a/pallets/ethereum-xcm/src/tests/v2.rs +++ b/pallets/ethereum-xcm/src/tests/v2.rs @@ -146,7 +146,7 @@ fn test_transact_xcm_evm_call_works() { input: hex::decode(CONTRACT).unwrap(), } .sign(&alice.private_key, None); - assert_ok!(Ethereum::execute(alice.address, &t, None,)); + assert_ok!(Ethereum::execute(alice.address, &t, None, None)); let contract_address = hex::decode("32dcab0ef3fb2de2fce1d2e0799d36239671f04a").unwrap(); let foo = hex::decode("c2985578").unwrap(); diff --git a/pallets/moonbeam-foreign-assets/Cargo.toml b/pallets/moonbeam-foreign-assets/Cargo.toml new file mode 100644 index 0000000000..02b6e08c66 --- /dev/null +++ b/pallets/moonbeam-foreign-assets/Cargo.toml @@ -0,0 +1,62 @@ +[package] +name = "pallet-moonbeam-foreign-assets" +authors = { workspace = true } +edition = "2021" +version = "0.1.0" + +[dependencies] +ethereum-types = { workspace = true } +log = { workspace = true } + +# Substrate +frame-support = { workspace = true } +frame-system = { workspace = true } +parity-scale-codec = { workspace = true, features = [ "derive" ] } +precompile-utils = { workspace = true } +precompile-utils-macro = { workspace = true } +scale-info = { workspace = true, features = [ "derive" ] } +sp-io = { workspace = true } +sp-runtime = { workspace = true } +sp-std = { workspace = true } + +# Frontier +fp-evm = { workspace = true } +pallet-evm = { workspace = true, features = ["forbid-evm-reentrancy"] } + +# Polkadot +xcm = { workspace = true } +xcm-executor = { workspace = true } + +# Benchmarks +frame-benchmarking = { workspace = true, optional = true } + +[build-dependencies] +hex = { workspace = true, features = [ "std" ] } + +[dev-dependencies] +hex = { workspace = true } +pallet-balances = { workspace = true, features = [ "insecure_zero_ed", "std" ] } +pallet-timestamp = { workspace = true, features = [ "std" ] } +sp-core = { workspace = true, features = [ "std" ] } + +[features] +default = [ "std" ] +std = [ + "ethereum-types/std", + "frame-benchmarking/std", + "frame-support/std", + "frame-system/std", + "precompile-utils/std", + "precompile-utils/testing", + "pallet-evm/std", + "parity-scale-codec/std", + "scale-info/std", + "sp-io/std", + "sp-runtime/std", + "sp-std/std", + "xcm/std", + "xcm-executor/std" +] + +runtime-benchmarks = [ "frame-benchmarking"] +try-runtime = [ "frame-support/try-runtime" ] diff --git a/pallets/moonbeam-foreign-assets/build.rs b/pallets/moonbeam-foreign-assets/build.rs new file mode 100644 index 0000000000..b3bb0cc3a9 --- /dev/null +++ b/pallets/moonbeam-foreign-assets/build.rs @@ -0,0 +1,45 @@ +// Copyright 2024 Moonbeam Foundation. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use std::fs::File; +use std::io::prelude::*; + +// Length of encoded constructor parameters +const PARAMS_LEN: usize = 256; + +fn main() { + let hex_str = include_str!("resources/foreign_erc20_initcode.hex"); + let prefix_0x = hex_str.chars().nth(1) == Some('x'); + let bytecode = if prefix_0x { + hex::decode(&hex_str[2..]) + } else { + hex::decode(hex_str) + } + .expect("fail to decode hexadecimal string in file foreign_erc20_initcode.hex"); + + // The encoded parameters at the end of the initializer bytecode should be removed, + // (the runtime will append the constructor parameters dynamically). + let bytecode_end = if bytecode.len() > PARAMS_LEN { + bytecode.len() - PARAMS_LEN + } else { + 0 + }; + + let mut file = File::create("resources/foreign_erc20_initcode.bin") + .expect("Fail to create file resources/foreign_erc20_initcode.bin"); + file.write_all(&bytecode[..bytecode_end]) + .expect("fail to write bytecode in /foreign_erc20_initcode.bin"); +} diff --git a/pallets/moonbeam-foreign-assets/resources/foreign_erc20.sol b/pallets/moonbeam-foreign-assets/resources/foreign_erc20.sol new file mode 100644 index 0000000000..307392cb6a --- /dev/null +++ b/pallets/moonbeam-foreign-assets/resources/foreign_erc20.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +// Compatible with OpenZeppelin Contracts ^5.0.0 +pragma solidity ^0.8.20; + +import "@openzeppelin/contracts@5.0.2/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts@5.0.2/token/ERC20/extensions/ERC20Burnable.sol"; +import "@openzeppelin/contracts@5.0.2/token/ERC20/extensions/ERC20Pausable.sol"; +import "@openzeppelin/contracts@5.0.2/access/Ownable.sol"; +import "@openzeppelin/contracts@5.0.2/token/ERC20/extensions/ERC20Permit.sol"; + +contract MyToken is ERC20, ERC20Pausable, Ownable, ERC20Permit { + constructor( + address initialOwner, + uint8 tokenDecimals, + string memory symbol, + string memory tokenName + ) ERC20(tokenName, symbol) Ownable(initialOwner) ERC20Permit(tokenName) { + _decimals = tokenDecimals; + } + + uint8 private _decimals; + + function pause() public onlyOwner { + _pause(); + } + + function unpause() public onlyOwner { + _unpause(); + } + + function mintInto(address to, uint256 amount) public onlyOwner { + _mint(to, amount); + } + + function burnFrom(address from, uint256 amount) public onlyOwner { + _burn(from, amount); + } + + function burnAllFrom(address account) public onlyOwner { + _burn(account, balanceOf(account)); + } + + function decimals() public view override returns (uint8) { + return _decimals; + } + + // override ERC20 methods that should be disabled when the asset is "paused" + + function approve( + address spender, + uint256 value + ) public override(ERC20) whenNotPaused returns (bool) { + address owner = _msgSender(); + _approve(owner, spender, value); + return true; + } + + function transfer( + address to, + uint256 value + ) public override(ERC20) whenNotPaused returns (bool) { + address owner = _msgSender(); + _transfer(owner, to, value); + return true; + } + + function transferFrom( + address from, + address to, + uint256 value + ) public override(ERC20) whenNotPaused returns (bool) { + address spender = _msgSender(); + _spendAllowance(from, spender, value); + _transfer(from, to, value); + return true; + } + + // The following functions are overrides required by Solidity. + + function _update( + address from, + address to, + uint256 value + ) internal override(ERC20, ERC20Pausable) { + super._update(from, to, value); + } +} diff --git a/pallets/moonbeam-foreign-assets/resources/foreign_erc20_initcode.bin b/pallets/moonbeam-foreign-assets/resources/foreign_erc20_initcode.bin new file mode 100644 index 0000000000000000000000000000000000000000..a19de32a5759006d5e047f29f596cedcc58ac96e GIT binary patch literal 11455 zcmd5?d3Y36woi5S9v}%xIwa|&8{EcmWgPb{GKeyYbRu*qtyUet=Qg5<%iuCyRo$J0 z?XwdI_z5!)R|cLUiaIDR%%F}aE(4>Z;~==9A}&v!pbpFXom*9%h3+KkKNCNjTlb!O z?%D6T_gs=Rt)c0cdLF{Sykahf~PBaV&v%1T#Nc6>~owlB|L$jILaDprxvZ%qG6Cq(kYrZMXuH8$+l%hCrMEQjA85o&1d!;YY=0G-UwhRs%;UUy8Q_r z#rG&}v5lgGWWTeTri;#_^E0QdDZn+;fJ>qZC{dPe9C?lpU94QD@!x zm&wKqhO)Jh7e**3?})WtAv*I`^=;VT7_x$sr4;~$I z%~g|?El`fFpL=34W+IwuEUhHhzZ7!4ks^7bBfo5nWLG=^m25}%U!87Mg0;E6cdSj@ zr`Bd;iS{;uEIDi1+7}kC+Iwo_k?YUhb>aHy2mJRfRSQeLe`)EGi<=HRv7toU(g;~J zjyjsjh)N`%)iG~wJKN3m!fv#vk&c~-i1n4LCS0umAT#|dYiOG-06PDz<%&sI)twNp}YchEbv=)K-q6mSOfK4NH ziJD4D4qi_qdCpCfM~Z{0k9h%;L!u$2(`gAR_goE(zajSxAcs7^O`93=3`anj+inqN zvJeK7XCA=jl6xw^44}L>ZEDeGi9Dx+&REPgQeD+GJ<}o&2Hxi};W?7u#srl-8(Pd( ziQI?86Z2vqmpmU>9T&$FbJ5X|ks5Q18X(K-R>&)pyot&3mI`2x4kZCt+Yfj+fRA>7 zPt5@{VI6JrV(r2LVIe}I{n6wwN0X}NGTjicWQKI|E>N_j8ET6qw5VBX$mCsyg_n}| zd{EhG=mtz7szx0P)}kyzAhGmmn(%5{UYbAUBHw_dV<3h8HOc!o=+75wPKj1WOs`Id z=En5qP`Zj0u*M$@>>}6fK(J>AMsVlpudG`Q?llN=ZQWKa9azM>WlGPJ-k=QmsyF zei!-6##WT z&oSW?zE{A#2BkuoW#FrV{Ld(A8tgovm@N{F3y_azO!6bjG>?x_ppF@an#jMtSum?6 zOqP&;hmxKlHJamLR8kw9AtTMRJ(&EjVsZ*Vfl>iPfdN`%MhIBJMQS_@PtshiE~%CE z!Q#LlNDLf_5Qdm&!s`W@CW}3AmYR~%6gVgs+j6=Ns0IbbI1?x^#Sk{(%wKHHZ^8Ul z3Lq7tz&z|`Qj7g@m)4Myn(dF}nwF9>6u6YZR%^Pm=KKzaK4=Uc!8mQZr@&@Q{uKDs zz|`kC3Q*uXBVz>>1Rx5!z!O4f8ZvU`Sx5{+24PJUJjeidZ?GxbczGAFybPRLz}6=P z8_h<+u?}ob-(-`5NANxzoRX#>90NiNPB$nxiUSS%cqIj&P$>9lpB|dhqB2_{`)MlF z&bkq+XnLczxKUfvXm8KR$*@f$haI|{ip$g!RVrzfn(#Y@e+Tapzi;yIfVKQPuv+|% z0J}q%t2_2;yk&@dxWvwf-N%&zp`sqEZ3*j>rmw#&TSi5XEBd64w-%m(=FN7qg5+PI zxzw|0HJULrm#xgSqp73$hUbCT&|HM(riq`QhUO|Xzuxn~EHpn+umBQkfxLoTcVg&w zuRc?RCa;r@zkDH@Te-QSdJ39fp*iQimlK#<;mjR=%14)#k>tk^H!DcmjplJ9KdQup z8Z=Ko=Z`0$c>lLxLlXNb*-6C%x=|UtiHTB|yQ|lc_t#8%b`f)Ns z7fCnq=xZ=X_dFYZ26}3-kJ+gn!#~gozl29Qh`OJNCyFrkIJw`kXRhV3o4d{2+Bx$* z9!1O~_lGw8j{R10xv~3OqpmU@-P;wLYZ!TsvPX}?XxRF&xpFm-=Tt$H>(}HNYr`q~ zuW@sZCf5x-%G`J++wd*i(~Sq$9pqVR;eE7o=0kuJa`QZ8jlJGE_HqvE1{>?9{jq+5 z6v3MLEqT7N;N;>3^X;Uz?rhOz^CpMMd#4R^C~(!i)NS-6@~*W<&tkf|X{dw7)f5SYNYG)TQ@2#i_S3D-Ojva(^7t&}B00 z={779(3uKml#-j^Nkw{UoZFRZY6Dywh7b*vB8|PDg4n7!ja_MEG88-*40c9va=$>q6Tpc3EkyT?DPdR?d=|Sq z?^~{M4!+MFd^;U{9yx<;xcD?o_6*7Zb@A&qYA5-@xiWWV#F5fQJo8Lz zdCwRccw;=lYkKlb($!SnV@W7~uaI(9{Hjr~AR<3`9=6wd5@Gxwycj3Mf_u-aNbv>N z%r<%cWzwKUOrt&XGaGCN4SL_AQbTI3Y8rXHR5B8nyo0DD8BdHlTGeaSZdr`?2;`)P zQ{)$@EaEP2vOYf~eT)%xC2QV@4?;`DM?Z$gBX;6lguT6cfP zc{4d>>gUS`Km0^;Ohh}r*EiElndLMtzC}7d~yOH$%S){nb4j06A#Lu-D(K6I?%txqx>|nmI$XM>WmRZJ?4Jb%Qegj)X#i4vCZm4>8E|}0f&5Sf z3|L{Uw|(SMp1#>0!1-@?>mINgmS`)0{XE$l79PuQ3I#5kE3lspJXwkLiFH&(0+5$0 zeF7qN88{98GVod&{0N&#BFkUDqjKC47QFvYUi`!t!O@AYx9(fiwj_0K?Y(<8jJ)rY zW#^rL%f^}8K3p+v84X{B zAJ5(?@_m;v%>+^l3juIjS*^ z4-_~HKu6>4L=}PT4^(=G$gfjWf%=p)fNYgYA4A5{N);$SwBri4Jw~O^BWtQeB5dN$ zHx`>GehY@c0@;8}Wxuinv(>e^A0er%hyDwd96|*{ZrMs}y?H+yII*|jWubfmj~rT`hz4K$>)Iy{N@EA2!E?cAmow`<_Krq_ALNK1dfLuB)ILjBeR@-$0J*AH z`Qi2jK~xbtFDe~*t6o$-RwP_ zDsZ!I;BZs^Q2!4%Ztr=SYX7UYcW@0E?b zu}K^TAUajpCXS$NJQW+Q;$-xXP*W5=P?Vh2({eU5;rmJ$ZN(1dR8>FiR8-RtDg=n! zh~rBEv(MixQ{_kyB;k-eH^%?Ph-u=pw9|ol6#fINOsdSKr^+b`RbEZe&v1Y??Jfgd zy459DQs@ZYX2VRb@2W?=g{7Bf>&NIK*+?)I%8#mwGSoWp4Z0z3w)wkWS zhXyDVDt54kaF45oF)z7$>mB`gND$)tuP#2jCxM$JW;!$pXeV}G=|*(jkXs2C!o1Eu zX1zL~Pev%j_kUgPANQa>1_@K>d9k%q=yeVeRmiBs;Y8C^3cZ)2YK^xLlv%pnXoU8G zki9)_G;rk=sSb6y)uGp}yKgBEsoMXL!Nn2%$L}`GQ0xbv z(uO?XNJoZ*EuribepXmD;p2% z+w61x+gW5X5VI_U>rn&iQK#?m+CZi1uS}|54wtF^9u>0cRiZ*x6SOO2)h}YCrreu!&~^LQ z7i*TIA2(7wWmS(U>oA17Cx;-E5;Oc@pynfmYCfbIT=3#bwC3xKiRT41t-{UlV4xP) zzud9fdT$VG&$67z0%_t2ECb0D|6EEgEVA)y& z)xK?YMd(U2?ch7UC;T(#eX5n@6(nwyZ^*IR(W zSm)!J@U1|Jf{R51g=ax5um_u@f+o(7emLwp8VaxNCQb_f9eY3+m#AD?&RJ-e87hT$ zniOt>t=AR73&IP97t|GF8Xg4bY9hr2^}3T4JV~h=)(Y5l@x+1{)g1wdEnpQwww@r= z4Z>EFffhPz$y-E`yDkC2%%m`m{0N;)NfXswZOpLUhWi>spJBAxeN>m_l6MQ$!UU-9 z_gwOBrm)E$%e2K@3}-p>)HP!2Q}Dv@c6O*c7BB_;$7;4rv~H878qBvZBI~wWI*0ev z?dG4 zEj|`N0pgDhra_>O4gz}E7#keF|71}9$ko9#3k=79$1bBI7|cc=9m`Z$=yPXqZLu}! zN=yQ^uwRPa#FId+_`sP@pc5Z$)|(IE0MS1%=@toH-h61fg>W?xIyhcrgy0xqi=uBZ zLd#Vs`aUBB4q)$qLE$f+=#T7&IuEt_16<|+t2A^h_Be$0wipeakP^-In8_6D{6=Z$ zbqWogN<*=2SPr!J?#WkN`(M*87&bV%JH2xI#-Goc^YLq=|L?g)+b*I9+seZc ZvhMFDf4u6j$3$- literal 0 HcmV?d00001 diff --git a/pallets/moonbeam-foreign-assets/resources/foreign_erc20_initcode.hex b/pallets/moonbeam-foreign-assets/resources/foreign_erc20_initcode.hex new file mode 100644 index 0000000000..704053de51 --- /dev/null +++ b/pallets/moonbeam-foreign-assets/resources/foreign_erc20_initcode.hex @@ -0,0 +1 @@ +0x610160604052348015610010575f80fd5b50604051612cbf380380612cbf833981810160405281019061003291906105ad565b80806040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250868486816003908161007c9190610856565b50806004908161008c9190610856565b5050505f60055f6101000a81548160ff0219169083151502179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610118575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161010f9190610934565b60405180910390fd5b610127816101f660201b60201c565b5061013c6006836102bb60201b90919060201c565b61012081815250506101586007826102bb60201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a0818152505061019561030860201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050508260095f6101000a81548160ff021916908360ff16021790555050505050610ac0565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6020835110156102dc576102d58361036260201b60201c565b9050610302565b826102ec836103c760201b60201c565b5f0190816102fa9190610856565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001610347959493929190610974565b60405160208183030381529060405280519060200120905090565b5f80829050601f815111156103ae57826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016103a59190610a0d565b60405180910390fd5b8051816103ba90610a5a565b5f1c175f1b915050919050565b5f819050919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61040a826103e1565b9050919050565b61041a81610400565b8114610424575f80fd5b50565b5f8151905061043581610411565b92915050565b5f60ff82169050919050565b6104508161043b565b811461045a575f80fd5b50565b5f8151905061046b81610447565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6104bf82610479565b810181811067ffffffffffffffff821117156104de576104dd610489565b5b80604052505050565b5f6104f06103d0565b90506104fc82826104b6565b919050565b5f67ffffffffffffffff82111561051b5761051a610489565b5b61052482610479565b9050602081019050919050565b8281835e5f83830152505050565b5f61055161054c84610501565b6104e7565b90508281526020810184848401111561056d5761056c610475565b5b610578848285610531565b509392505050565b5f82601f83011261059457610593610471565b5b81516105a484826020860161053f565b91505092915050565b5f805f80608085870312156105c5576105c46103d9565b5b5f6105d287828801610427565b94505060206105e38782880161045d565b935050604085015167ffffffffffffffff811115610604576106036103dd565b5b61061087828801610580565b925050606085015167ffffffffffffffff811115610631576106306103dd565b5b61063d87828801610580565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061069757607f821691505b6020821081036106aa576106a9610653565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261070c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106d1565b61071686836106d1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61075a6107556107508461072e565b610737565b61072e565b9050919050565b5f819050919050565b61077383610740565b61078761077f82610761565b8484546106dd565b825550505050565b5f90565b61079b61078f565b6107a681848461076a565b505050565b5b818110156107c9576107be5f82610793565b6001810190506107ac565b5050565b601f82111561080e576107df816106b0565b6107e8846106c2565b810160208510156107f7578190505b61080b610803856106c2565b8301826107ab565b50505b505050565b5f82821c905092915050565b5f61082e5f1984600802610813565b1980831691505092915050565b5f610846838361081f565b9150826002028217905092915050565b61085f82610649565b67ffffffffffffffff81111561087857610877610489565b5b6108828254610680565b61088d8282856107cd565b5f60209050601f8311600181146108be575f84156108ac578287015190505b6108b6858261083b565b86555061091d565b601f1984166108cc866106b0565b5f5b828110156108f3578489015182556001820191506020850194506020810190506108ce565b86831015610910578489015161090c601f89168261081f565b8355505b6001600288020188555050505b505050505050565b61092e81610400565b82525050565b5f6020820190506109475f830184610925565b92915050565b5f819050919050565b61095f8161094d565b82525050565b61096e8161072e565b82525050565b5f60a0820190506109875f830188610956565b6109946020830187610956565b6109a16040830186610956565b6109ae6060830185610965565b6109bb6080830184610925565b9695505050505050565b5f82825260208201905092915050565b5f6109df82610649565b6109e981856109c5565b93506109f9818560208601610531565b610a0281610479565b840191505092915050565b5f6020820190508181035f830152610a2581846109d5565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f610a51825161094d565b80915050919050565b5f610a6482610a2d565b82610a6e84610a37565b9050610a7981610a46565b92506020821015610ab957610ab47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026106d1565b831692505b5050919050565b60805160a05160c05160e0516101005161012051610140516121ae610b115f395f610f8801525f610f4d01525f6112f701525f6112d601525f610cc301525f610d1901525f610d4201526121ae5ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c806379cc6790116100b657806395d89b411161007a57806395d89b4114610332578063a9059cbb14610350578063aab3859214610380578063d505accf1461039c578063dd62ed3e146103b8578063f2fde38b146103e857610140565b806379cc67901461029a5780637ecebe00146102b65780638456cb59146102e657806384b0196e146102f05780638da5cb5b1461031457610140565b8063313ce56711610108578063313ce567146101fc5780633644e5151461021a5780633f4ba83a146102385780635c975abb1461024257806370a0823114610260578063715018a61461029057610140565b806306fdde0314610144578063095ea7b314610162578063167db3791461019257806318160ddd146101ae57806323b872dd146101cc575b5f80fd5b61014c610404565b6040516101599190611a1e565b60405180910390f35b61017c60048036038101906101779190611acf565b610494565b6040516101899190611b27565b60405180910390f35b6101ac60048036038101906101a79190611b40565b6104be565b005b6101b66104db565b6040516101c39190611b7a565b60405180910390f35b6101e660048036038101906101e19190611b93565b6104e4565b6040516101f39190611b27565b60405180910390f35b61020461051a565b6040516102119190611bfe565b60405180910390f35b61022261052f565b60405161022f9190611c2f565b60405180910390f35b61024061053d565b005b61024a61054f565b6040516102579190611b27565b60405180910390f35b61027a60048036038101906102759190611b40565b610564565b6040516102879190611b7a565b60405180910390f35b6102986105a9565b005b6102b460048036038101906102af9190611acf565b6105bc565b005b6102d060048036038101906102cb9190611b40565b6105d2565b6040516102dd9190611b7a565b60405180910390f35b6102ee6105e3565b005b6102f86105f5565b60405161030b9796959493929190611d48565b60405180910390f35b61031c61069a565b6040516103299190611dca565b60405180910390f35b61033a6106c3565b6040516103479190611a1e565b60405180910390f35b61036a60048036038101906103659190611acf565b610753565b6040516103779190611b27565b60405180910390f35b61039a60048036038101906103959190611acf565b61077d565b005b6103b660048036038101906103b19190611e37565b610793565b005b6103d260048036038101906103cd9190611ed4565b6108d8565b6040516103df9190611b7a565b60405180910390f35b61040260048036038101906103fd9190611b40565b61095a565b005b60606003805461041390611f3f565b80601f016020809104026020016040519081016040528092919081815260200182805461043f90611f3f565b801561048a5780601f106104615761010080835404028352916020019161048a565b820191905f5260205f20905b81548152906001019060200180831161046d57829003601f168201915b5050505050905090565b5f61049d6109de565b5f6104a6610a1f565b90506104b3818585610a26565b600191505092915050565b6104c6610a38565b6104d8816104d383610564565b610abf565b50565b5f600254905090565b5f6104ed6109de565b5f6104f6610a1f565b9050610503858285610b3e565b61050e858585610bd0565b60019150509392505050565b5f60095f9054906101000a900460ff16905090565b5f610538610cc0565b905090565b610545610a38565b61054d610d76565b565b5f60055f9054906101000a900460ff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6105b1610a38565b6105ba5f610dd7565b565b6105c4610a38565b6105ce8282610abf565b5050565b5f6105dc82610e9c565b9050919050565b6105eb610a38565b6105f3610ee2565b565b5f6060805f805f6060610606610f44565b61060e610f7f565b46305f801b5f67ffffffffffffffff81111561062d5761062c611f6f565b5b60405190808252806020026020018201604052801561065b5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546106d290611f3f565b80601f01602080910402602001604051908101604052809291908181526020018280546106fe90611f3f565b80156107495780601f1061072057610100808354040283529160200191610749565b820191905f5260205f20905b81548152906001019060200180831161072c57829003601f168201915b5050505050905090565b5f61075c6109de565b5f610765610a1f565b9050610772818585610bd0565b600191505092915050565b610785610a38565b61078f8282610fba565b5050565b834211156107d857836040517f627913020000000000000000000000000000000000000000000000000000000081526004016107cf9190611b7a565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108068c611039565b8960405160200161081c96959493929190611f9c565b6040516020818303038152906040528051906020012090505f61083e8261108c565b90505f61084d828787876110a5565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108c157808a6040517f4b800e460000000000000000000000000000000000000000000000000000000081526004016108b8929190611ffb565b60405180910390fd5b6108cc8a8a8a610a26565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610962610a38565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109d2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016109c99190611dca565b60405180910390fd5b6109db81610dd7565b50565b6109e661054f565b15610a1d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b610a3383838360016110d3565b505050565b610a40610a1f565b73ffffffffffffffffffffffffffffffffffffffff16610a5e61069a565b73ffffffffffffffffffffffffffffffffffffffff1614610abd57610a81610a1f565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ab49190611dca565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b2f575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610b269190611dca565b60405180910390fd5b610b3a825f836112a2565b5050565b5f610b4984846108d8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bca5781811015610bbb578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610bb293929190612022565b60405180910390fd5b610bc984848484035f6110d3565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c40575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610c379190611dca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cb0575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ca79190611dca565b60405180910390fd5b610cbb8383836112a2565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610d3b57507f000000000000000000000000000000000000000000000000000000000000000046145b15610d68577f00000000000000000000000000000000000000000000000000000000000000009050610d73565b610d706112b2565b90505b90565b610d7e611347565b5f60055f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610dc0610a1f565b604051610dcd9190611dca565b60405180910390a1565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610eea6109de565b600160055f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f2d610a1f565b604051610f3a9190611dca565b60405180910390a1565b6060610f7a60067f000000000000000000000000000000000000000000000000000000000000000061138790919063ffffffff16565b905090565b6060610fb560077f000000000000000000000000000000000000000000000000000000000000000061138790919063ffffffff16565b905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361102a575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016110219190611dca565b60405180910390fd5b6110355f83836112a2565b5050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f61109e611098610cc0565b83611434565b9050919050565b5f805f806110b588888888611474565b9250925092506110c5828261155b565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611143575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161113a9190611dca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111b3575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016111aa9190611dca565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561129c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112939190611b7a565b60405180910390a35b50505050565b6112ad8383836116bd565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161132c959493929190612057565b60405160208183030381529060405280519060200120905090565b61134f61054f565b611385576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b606060ff5f1b83146113a35761139c836116d5565b905061142e565b8180546113af90611f3f565b80601f01602080910402602001604051908101604052809291908181526020018280546113db90611f3f565b80156114265780601f106113fd57610100808354040283529160200191611426565b820191905f5260205f20905b81548152906001019060200180831161140957829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156114b0575f600385925092509250611551565b5f6001888888886040515f81526020016040526040516114d394939291906120a8565b6020604051602081039080840390855afa1580156114f3573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611544575f60015f801b93509350935050611551565b805f805f1b935093509350505b9450945094915050565b5f600381111561156e5761156d6120eb565b5b826003811115611581576115806120eb565b5b03156116b9576001600381111561159b5761159a6120eb565b5b8260038111156115ae576115ad6120eb565b5b036115e5576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156115f9576115f86120eb565b5b82600381111561160c5761160b6120eb565b5b0361165057805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016116479190611b7a565b60405180910390fd5b600380811115611663576116626120eb565b5b826003811115611676576116756120eb565b5b036116b857806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016116af9190611c2f565b60405180910390fd5b5b5050565b6116c56109de565b6116d0838383611747565b505050565b60605f6116e183611960565b90505f602067ffffffffffffffff8111156116ff576116fe611f6f565b5b6040519080825280601f01601f1916602001820160405280156117315781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611797578060025f82825461178b9190612145565b92505081905550611865565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611820578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161181793929190612022565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118ac578060025f82825403925050819055506118f6565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119539190611b7a565b60405180910390a3505050565b5f8060ff835f1c169050601f8111156119a5576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6119f0826119ae565b6119fa81856119b8565b9350611a0a8185602086016119c8565b611a13816119d6565b840191505092915050565b5f6020820190508181035f830152611a3681846119e6565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611a6b82611a42565b9050919050565b611a7b81611a61565b8114611a85575f80fd5b50565b5f81359050611a9681611a72565b92915050565b5f819050919050565b611aae81611a9c565b8114611ab8575f80fd5b50565b5f81359050611ac981611aa5565b92915050565b5f8060408385031215611ae557611ae4611a3e565b5b5f611af285828601611a88565b9250506020611b0385828601611abb565b9150509250929050565b5f8115159050919050565b611b2181611b0d565b82525050565b5f602082019050611b3a5f830184611b18565b92915050565b5f60208284031215611b5557611b54611a3e565b5b5f611b6284828501611a88565b91505092915050565b611b7481611a9c565b82525050565b5f602082019050611b8d5f830184611b6b565b92915050565b5f805f60608486031215611baa57611ba9611a3e565b5b5f611bb786828701611a88565b9350506020611bc886828701611a88565b9250506040611bd986828701611abb565b9150509250925092565b5f60ff82169050919050565b611bf881611be3565b82525050565b5f602082019050611c115f830184611bef565b92915050565b5f819050919050565b611c2981611c17565b82525050565b5f602082019050611c425f830184611c20565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611c7c81611c48565b82525050565b611c8b81611a61565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611cc381611a9c565b82525050565b5f611cd48383611cba565b60208301905092915050565b5f602082019050919050565b5f611cf682611c91565b611d008185611c9b565b9350611d0b83611cab565b805f5b83811015611d3b578151611d228882611cc9565b9750611d2d83611ce0565b925050600181019050611d0e565b5085935050505092915050565b5f60e082019050611d5b5f83018a611c73565b8181036020830152611d6d81896119e6565b90508181036040830152611d8181886119e6565b9050611d906060830187611b6b565b611d9d6080830186611c82565b611daa60a0830185611c20565b81810360c0830152611dbc8184611cec565b905098975050505050505050565b5f602082019050611ddd5f830184611c82565b92915050565b611dec81611be3565b8114611df6575f80fd5b50565b5f81359050611e0781611de3565b92915050565b611e1681611c17565b8114611e20575f80fd5b50565b5f81359050611e3181611e0d565b92915050565b5f805f805f805f60e0888a031215611e5257611e51611a3e565b5b5f611e5f8a828b01611a88565b9750506020611e708a828b01611a88565b9650506040611e818a828b01611abb565b9550506060611e928a828b01611abb565b9450506080611ea38a828b01611df9565b93505060a0611eb48a828b01611e23565b92505060c0611ec58a828b01611e23565b91505092959891949750929550565b5f8060408385031215611eea57611ee9611a3e565b5b5f611ef785828601611a88565b9250506020611f0885828601611a88565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611f5657607f821691505b602082108103611f6957611f68611f12565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050611faf5f830189611c20565b611fbc6020830188611c82565b611fc96040830187611c82565b611fd66060830186611b6b565b611fe36080830185611b6b565b611ff060a0830184611b6b565b979650505050505050565b5f60408201905061200e5f830185611c82565b61201b6020830184611c82565b9392505050565b5f6060820190506120355f830186611c82565b6120426020830185611b6b565b61204f6040830184611b6b565b949350505050565b5f60a08201905061206a5f830188611c20565b6120776020830187611c20565b6120846040830186611c20565b6120916060830185611b6b565b61209e6080830184611c82565b9695505050505050565b5f6080820190506120bb5f830187611c20565b6120c86020830186611bef565b6120d56040830185611c20565b6120e26060830184611c20565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61214f82611a9c565b915061215a83611a9c565b925082820190508082111561217257612171612118565b5b9291505056fea2646970667358221220fc84b3ecd32a8b8de7cf49f4c49cea5c61ad9148b07395762d9004f964e7b82b64736f6c634300081a00330000000000000000000000006d6f646c666f72676173737400000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000034d5454000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074d79546f6b656e00000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/pallets/moonbeam-foreign-assets/src/benchmarks.rs b/pallets/moonbeam-foreign-assets/src/benchmarks.rs new file mode 100644 index 0000000000..81024d2819 --- /dev/null +++ b/pallets/moonbeam-foreign-assets/src/benchmarks.rs @@ -0,0 +1,127 @@ +// Copyright 2024 Moonbeam Foundation. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +#![cfg(feature = "runtime-benchmarks")] + +use crate::{AssetStatus, Call, Config, Pallet}; +use frame_benchmarking::{benchmarks, impl_benchmark_test_suite}; +use frame_support::pallet_prelude::*; +use frame_system::RawOrigin; +use sp_runtime::traits::ConstU32; +use sp_runtime::BoundedVec; +use xcm::latest::prelude::*; + +fn create_n_foreign_asset(n: u32) -> DispatchResult { + for i in 1..=n { + Pallet::::create_foreign_asset( + RawOrigin::Root.into(), + i as u128, + location_of(i), + 18, + str_to_bv(&format!("MT{}", i)), + str_to_bv(&format!("Mytoken{}", i)), + )?; + assert_eq!(Pallet::::assets_by_id(i as u128), Some(location_of(i))); + } + + Ok(()) +} + +fn location_of(n: u32) -> Location { + Location::new(0, [Junction::GeneralIndex(n as u128)]) +} + +fn str_to_bv(str_: &str) -> BoundedVec> { + str_.as_bytes().to_vec().try_into().expect("too long") +} + +benchmarks! { + // Worst case scenario: MaxForeignAssets minus one already exists + create_foreign_asset { + create_n_foreign_asset::(T::MaxForeignAssets::get().saturating_sub(1))?; + let asset_id = T::MaxForeignAssets::get() as u128; + }: _(RawOrigin::Root, asset_id, Location::parent(), 18, str_to_bv("MT"), str_to_bv("Mytoken")) + verify { + assert_eq!( + Pallet::::assets_by_id(asset_id), + Some(Location::parent()) + ); + } + + // Worst case scenario: MaxForeignAssets already exists + change_xcm_location { + create_n_foreign_asset::(T::MaxForeignAssets::get())?; + }: _(RawOrigin::Root, 1, Location::here()) + verify { + assert_eq!( + Pallet::::assets_by_id(1), + Some(Location::here()) + ); + } + + // Worst case scenario: MaxForeignAssets already exists + freeze_foreign_asset { + create_n_foreign_asset::(T::MaxForeignAssets::get())?; + }: _(RawOrigin::Root, 1, true) + verify { + assert_eq!( + Pallet::::assets_by_location(location_of(1)), + Some((1, AssetStatus::FrozenXcmDepositAllowed)) + ); + } + + // Worst case scenario: + // - MaxForeignAssets already exists + // - The asset to unfreeze is already frozen (to avoid early error) + unfreeze_foreign_asset { + create_n_foreign_asset::(T::MaxForeignAssets::get())?; + Pallet::::freeze_foreign_asset( + RawOrigin::Root.into(), + 1, + true + )?; + assert_eq!( + Pallet::::assets_by_location(location_of(1)), + Some((1, AssetStatus::FrozenXcmDepositAllowed)) + ); + }: _(RawOrigin::Root, 1) + verify { + assert_eq!( + Pallet::::assets_by_location(location_of(1)), + Some((1, AssetStatus::Active)) + ); + } +} + +#[cfg(test)] +mod tests { + use crate::mock::Test; + use sp_io::TestExternalities; + use sp_runtime::BuildStorage; + + pub fn new_test_ext() -> TestExternalities { + let t = frame_system::GenesisConfig::::default() + .build_storage() + .unwrap(); + TestExternalities::new(t) + } +} + +impl_benchmark_test_suite!( + Pallet, + crate::benchmarks::tests::new_test_ext(), + crate::mock::Test +); diff --git a/pallets/moonbeam-foreign-assets/src/evm.rs b/pallets/moonbeam-foreign-assets/src/evm.rs new file mode 100644 index 0000000000..35b9434583 --- /dev/null +++ b/pallets/moonbeam-foreign-assets/src/evm.rs @@ -0,0 +1,369 @@ +// Copyright 2024 Moonbeam Foundation. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use crate::{AssetId, Error, Pallet}; +use ethereum_types::{BigEndianHash, H160, H256, U256}; +use fp_evm::{ExitReason, ExitSucceed}; +use frame_support::ensure; +use frame_support::pallet_prelude::Weight; +use pallet_evm::{GasWeightMapping, Runner}; +use precompile_utils::prelude::*; +use precompile_utils::solidity::codec::{Address, BoundedString}; +use precompile_utils::solidity::Codec; +use precompile_utils_macro::keccak256; +use sp_runtime::traits::ConstU32; +use sp_runtime::DispatchError; +use sp_std::vec::Vec; +use xcm::latest::Error as XcmError; + +const ERC20_CALL_MAX_CALLDATA_SIZE: usize = 4 + 32 + 32; // selector + address + uint256 +const ERC20_CREATE_MAX_CALLDATA_SIZE: usize = 16 * 1024; // 16Ko + +// Hardcoded gas limits (from manueal binary search) +const ERC20_CREATE_GAS_LIMIT: u64 = 3_367_000; // highest failure: 3_366_000 +const ERC20_BURN_FROM_GAS_LIMIT: u64 = 155_000; // highest failure: 154_000 +const ERC20_MINT_INTO_GAS_LIMIT: u64 = 155_000; // highest failure: 154_000 +const ERC20_PAUSE_GAS_LIMIT: u64 = 150_000; // highest failure: 149_500 +const ERC20_TRANSFER_GAS_LIMIT: u64 = 155_000; // highest failure: 154_000 +const ERC20_UNPAUSE_GAS_LIMIT: u64 = 150_000; // highest failure: 149_500 + +pub enum EvmError { + BurnFromFail, + ContractReturnInvalidValue, + DispatchError(DispatchError), + EvmCallFail, + MintIntoFail, + TransferFail, +} + +impl From for EvmError { + fn from(e: DispatchError) -> Self { + Self::DispatchError(e) + } +} + +impl From for XcmError { + fn from(error: EvmError) -> XcmError { + match error { + EvmError::BurnFromFail => { + XcmError::FailedToTransactAsset("Erc20 contract call burnFrom fail") + } + EvmError::ContractReturnInvalidValue => { + XcmError::FailedToTransactAsset("Erc20 contract return invalid value") + } + EvmError::DispatchError(err) => { + log::debug!("dispatch error: {:?}", err); + Self::FailedToTransactAsset("storage layer error") + } + EvmError::EvmCallFail => XcmError::FailedToTransactAsset("Fail to call erc20 contract"), + EvmError::MintIntoFail => { + XcmError::FailedToTransactAsset("Erc20 contract call mintInto fail") + } + EvmError::TransferFail => { + XcmError::FailedToTransactAsset("Erc20 contract call transfer fail") + } + } + } +} + +#[derive(Codec)] +#[cfg_attr(test, derive(Debug))] +struct ForeignErc20ConstructorArgs { + owner: Address, + decimals: u8, + symbol: BoundedString>, + token_name: BoundedString>, +} + +pub(crate) struct EvmCaller(core::marker::PhantomData); + +impl EvmCaller { + /// Deploy foreign asset erc20 contract + pub(crate) fn erc20_create( + asset_id: AssetId, + decimals: u8, + symbol: &str, + token_name: &str, + ) -> Result> { + // Get init code + let mut init = Vec::with_capacity(ERC20_CREATE_MAX_CALLDATA_SIZE); + init.extend_from_slice(include_bytes!("../resources/foreign_erc20_initcode.bin")); + + // Add constructor parameters + let args = ForeignErc20ConstructorArgs { + owner: Pallet::::account_id().into(), + decimals, + symbol: symbol.into(), + token_name: token_name.into(), + }; + let encoded_args = precompile_utils::solidity::codec::Writer::new() + .write(args) + .build(); + // Skip size of constructor args (32 bytes) + init.extend_from_slice(&encoded_args[32..]); + + let contract_adress = Pallet::::contract_address_from_asset_id(asset_id); + + let exec_info = T::EvmRunner::create_force_address( + Pallet::::account_id(), + init, + U256::default(), + ERC20_CREATE_GAS_LIMIT, + None, + None, + None, + Default::default(), + false, + false, + None, + None, + &::config(), + contract_adress, + ) + .map_err(|_| Error::Erc20ContractCreationFail)?; + + ensure!( + matches!( + exec_info.exit_reason, + ExitReason::Succeed(ExitSucceed::Returned | ExitSucceed::Stopped) + ), + Error::Erc20ContractCreationFail + ); + + Ok(contract_adress) + } + + pub(crate) fn erc20_mint_into( + erc20_contract_address: H160, + beneficiary: H160, + amount: U256, + ) -> Result<(), EvmError> { + let mut input = Vec::with_capacity(ERC20_CALL_MAX_CALLDATA_SIZE); + // Selector + input.extend_from_slice(&keccak256!("mintInto(address,uint256)")[..4]); + // append beneficiary address + input.extend_from_slice(H256::from(beneficiary).as_bytes()); + // append amount to be minted + input.extend_from_slice(H256::from_uint(&amount).as_bytes()); + + let weight_limit: Weight = + T::GasWeightMapping::gas_to_weight(ERC20_MINT_INTO_GAS_LIMIT, true); + + let exec_info = T::EvmRunner::call( + Pallet::::account_id(), + erc20_contract_address, + input, + U256::default(), + ERC20_MINT_INTO_GAS_LIMIT, + None, + None, + None, + Default::default(), + false, + false, + Some(weight_limit), + Some(0), + &::config(), + ) + .map_err(|_| EvmError::EvmCallFail)?; + + ensure!( + matches!( + exec_info.exit_reason, + ExitReason::Succeed(ExitSucceed::Returned | ExitSucceed::Stopped) + ), + EvmError::MintIntoFail + ); + + Ok(()) + } + + pub(crate) fn erc20_transfer( + erc20_contract_address: H160, + from: H160, + to: H160, + amount: U256, + ) -> Result<(), EvmError> { + let mut input = Vec::with_capacity(ERC20_CALL_MAX_CALLDATA_SIZE); + // Selector + input.extend_from_slice(&keccak256!("transfer(address,uint256)")[..4]); + // append receiver address + input.extend_from_slice(H256::from(to).as_bytes()); + // append amount to be transferred + input.extend_from_slice(H256::from_uint(&amount).as_bytes()); + + let weight_limit: Weight = + T::GasWeightMapping::gas_to_weight(ERC20_TRANSFER_GAS_LIMIT, true); + + let exec_info = T::EvmRunner::call( + from, + erc20_contract_address, + input, + U256::default(), + ERC20_TRANSFER_GAS_LIMIT, + None, + None, + None, + Default::default(), + false, + false, + Some(weight_limit), + Some(0), + &::config(), + ) + .map_err(|_| EvmError::EvmCallFail)?; + + ensure!( + matches!( + exec_info.exit_reason, + ExitReason::Succeed(ExitSucceed::Returned | ExitSucceed::Stopped) + ), + EvmError::TransferFail + ); + + // return value is true. + let mut bytes = [0u8; 32]; + U256::from(1).to_big_endian(&mut bytes); + + // Check return value to make sure not calling on empty contracts. + ensure!( + !exec_info.value.is_empty() && exec_info.value == bytes, + EvmError::ContractReturnInvalidValue + ); + + Ok(()) + } + + pub(crate) fn erc20_burn_from( + erc20_contract_address: H160, + who: H160, + amount: U256, + ) -> Result<(), EvmError> { + let mut input = Vec::with_capacity(ERC20_CALL_MAX_CALLDATA_SIZE); + // Selector + input.extend_from_slice(&keccak256!("burnFrom(address,uint256)")[..4]); + // append who address + input.extend_from_slice(H256::from(who).as_bytes()); + // append amount to be burn + input.extend_from_slice(H256::from_uint(&amount).as_bytes()); + + let weight_limit: Weight = + T::GasWeightMapping::gas_to_weight(ERC20_BURN_FROM_GAS_LIMIT, true); + + let exec_info = T::EvmRunner::call( + Pallet::::account_id(), + erc20_contract_address, + input, + U256::default(), + ERC20_BURN_FROM_GAS_LIMIT, + None, + None, + None, + Default::default(), + false, + false, + Some(weight_limit), + Some(0), + &::config(), + ) + .map_err(|_| EvmError::EvmCallFail)?; + + ensure!( + matches!( + exec_info.exit_reason, + ExitReason::Succeed(ExitSucceed::Returned | ExitSucceed::Stopped) + ), + EvmError::BurnFromFail + ); + + Ok(()) + } + + // Call contract selector "pause" + pub(crate) fn erc20_pause(asset_id: AssetId) -> Result<(), Error> { + let mut input = Vec::with_capacity(ERC20_CALL_MAX_CALLDATA_SIZE); + // Selector + input.extend_from_slice(&keccak256!("pause()")[..4]); + + let weight_limit: Weight = T::GasWeightMapping::gas_to_weight(ERC20_PAUSE_GAS_LIMIT, true); + + let exec_info = T::EvmRunner::call( + Pallet::::account_id(), + Pallet::::contract_address_from_asset_id(asset_id), + input, + U256::default(), + ERC20_PAUSE_GAS_LIMIT, + None, + None, + None, + Default::default(), + false, + false, + Some(weight_limit), + Some(0), + &::config(), + ) + .map_err(|_| Error::::EvmInternalError)?; + + ensure!( + matches!( + exec_info.exit_reason, + ExitReason::Succeed(ExitSucceed::Returned | ExitSucceed::Stopped) + ), + Error::::EvmCallPauseFail + ); + + Ok(()) + } + + // Call contract selector "unpause" + pub(crate) fn erc20_unpause(asset_id: AssetId) -> Result<(), Error> { + let mut input = Vec::with_capacity(ERC20_CALL_MAX_CALLDATA_SIZE); + // Selector + input.extend_from_slice(&keccak256!("unpause()")[..4]); + + let weight_limit: Weight = + T::GasWeightMapping::gas_to_weight(ERC20_UNPAUSE_GAS_LIMIT, true); + + let exec_info = T::EvmRunner::call( + Pallet::::account_id(), + Pallet::::contract_address_from_asset_id(asset_id), + input, + U256::default(), + ERC20_UNPAUSE_GAS_LIMIT, + None, + None, + None, + Default::default(), + false, + false, + Some(weight_limit), + Some(0), + &::config(), + ) + .map_err(|_| Error::::EvmInternalError)?; + + ensure!( + matches!( + exec_info.exit_reason, + ExitReason::Succeed(ExitSucceed::Returned | ExitSucceed::Stopped) + ), + Error::::EvmCallUnpauseFail + ); + + Ok(()) + } +} diff --git a/pallets/moonbeam-foreign-assets/src/lib.rs b/pallets/moonbeam-foreign-assets/src/lib.rs new file mode 100644 index 0000000000..14d3f6da91 --- /dev/null +++ b/pallets/moonbeam-foreign-assets/src/lib.rs @@ -0,0 +1,513 @@ +// Copyright 2024 Moonbeam Foundation. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! # Moonbeam Foreign Assets pallet +//! +//! This pallets allow to create and manage XCM derivative assets (aka. foreign assets). +//! +//! Each asset is implemented by an evm smart contract that is deployed by this pallet +//! The evm smart contract for each asset is trusted by the runtime, and should +//! be deployed only by the runtime itself. +//! +//! This pallet made several assumptions on theses evm smarts contracts: +//! - Only this pallet should be able to mint and burn tokens +//! - The following selectors should be exposed and callable only by this pallet account: +//! - burnFrom(address, uint256) +//! - mintInto(address, uint256) +//! - pause(address, uint256) +//! - unpause(address, uint256) +//! - The smart contract should expose as weel the ERC20.transfer selector +//! +//! Each asset has a unique identifier that can never change. +//! This identifier is named "AssetId", it's an integer (u128). +//! This pallet maintain a two-way mapping beetween each AssetId the XCM Location of the asset. + +#![cfg_attr(not(feature = "std"), no_std)] + +#[cfg(any(test, feature = "runtime-benchmarks"))] +pub mod benchmarks; +#[cfg(test)] +pub mod mock; +#[cfg(test)] +pub mod tests; +pub mod weights; + +mod evm; + +pub use pallet::*; +pub use weights::WeightInfo; + +use self::evm::EvmCaller; +use ethereum_types::{H160, U256}; +use frame_support::pallet; +use frame_support::pallet_prelude::*; +use frame_support::traits::Contains; +use frame_system::pallet_prelude::*; +use xcm::latest::{ + Asset, AssetId as XcmAssetId, Error as XcmError, Fungibility, Location, Result as XcmResult, + XcmContext, +}; +use xcm_executor::traits::Error as MatchError; + +const FOREIGN_ASSETS_PREFIX: [u8; 4] = [0xff, 0xff, 0xff, 0xff]; + +/// Trait for the OnForeignAssetRegistered hook +pub trait ForeignAssetCreatedHook { + fn on_asset_created(foreign_asset: &ForeignAsset, asset_id: &AssetId); +} + +impl ForeignAssetCreatedHook for () { + fn on_asset_created(_foreign_asset: &ForeignAsset, _asset_id: &AssetId) {} +} + +pub(crate) struct ForeignAssetsMatcher(core::marker::PhantomData); + +impl ForeignAssetsMatcher { + fn match_asset(asset: &Asset) -> Result<(H160, U256, AssetStatus), MatchError> { + let (amount, location) = match (&asset.fun, &asset.id) { + (Fungibility::Fungible(ref amount), XcmAssetId(ref location)) => (amount, location), + _ => return Err(MatchError::AssetNotHandled), + }; + + if let Some((asset_id, asset_status)) = AssetsByLocation::::get(&location) { + Ok(( + Pallet::::contract_address_from_asset_id(asset_id), + U256::from(*amount), + asset_status, + )) + } else { + Err(MatchError::AssetNotHandled) + } + } +} + +#[derive(Decode, Debug, Encode, PartialEq, TypeInfo)] +pub enum AssetStatus { + /// All operations are enabled + Active, + /// The asset is frozen, but deposit from XCM still work + FrozenXcmDepositAllowed, + /// The asset is frozen, and deposit from XCM will fail + FrozenXcmDepositForbidden, +} + +#[pallet] +pub mod pallet { + use super::*; + use pallet_evm::Runner; + use sp_runtime::traits::{AccountIdConversion, Convert}; + use xcm_executor::traits::ConvertLocation; + use xcm_executor::traits::Error as MatchError; + use xcm_executor::AssetsInHolding; + + #[pallet::pallet] + #[pallet::without_storage_info] + pub struct Pallet(PhantomData); + + /// The moonbeam foreign assets's pallet id + pub const PALLET_ID: frame_support::PalletId = frame_support::PalletId(*b"forgasst"); + + #[pallet::config] + pub trait Config: frame_system::Config + pallet_evm::Config { + // Convert AccountId to H160 + type AccountIdToH160: Convert; + + /// A filter to forbid some AssetId values, if you don't use it, put "Everything" + type AssetIdFilter: Contains; + + /// EVM runner + type EvmRunner: Runner; + + /// Origin that is allowed to create a new foreign assets + type ForeignAssetCreatorOrigin: EnsureOrigin; + + /// Origin that is allowed to freeze all tokens of a foreign asset + type ForeignAssetFreezerOrigin: EnsureOrigin; + + /// Origin that is allowed to modify asset information for foreign assets + type ForeignAssetModifierOrigin: EnsureOrigin; + + /// Origin that is allowed to unfreeze all tokens of a foreign asset that was previously + /// frozen + type ForeignAssetUnfreezerOrigin: EnsureOrigin; + + /// Hook to be called when new foreign asset is registered. + type OnForeignAssetCreated: ForeignAssetCreatedHook; + + /// Maximum nulmbers of differnt foreign assets + type MaxForeignAssets: Get; + + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + // Convert XCM Location to H160 + type XcmLocationToH160: ConvertLocation; + } + + pub type AssetBalance = U256; + pub type AssetId = u128; + + /// An error that can occur while executing the mapping pallet's logic. + #[pallet::error] + pub enum Error { + AssetAlreadyExists, + AssetAlreadyFrozen, + AssetDoesNotExist, + AssetIdFiltered, + AssetNotFrozen, + CorruptedStorageOrphanLocation, + //Erc20ContractCallFail, + Erc20ContractCreationFail, + EvmCallPauseFail, + EvmCallUnpauseFail, + EvmInternalError, + InvalidSymbol, + InvalidTokenName, + LocationAlreadyExists, + TooManyForeignAssets, + } + + #[pallet::event] + #[pallet::generate_deposit(pub(crate) fn deposit_event)] + pub enum Event { + /// New asset with the asset manager is registered + ForeignAssetCreated { + contract_address: H160, + asset_id: AssetId, + xcm_location: Location, + }, + /// Changed the xcm type mapping for a given asset id + ForeignAssetXcmLocationChanged { + asset_id: AssetId, + new_xcm_location: Location, + }, + // Freezes all tokens of a given asset id + ForeignAssetFrozen { + asset_id: AssetId, + xcm_location: Location, + }, + // Thawing a previously frozen asset + ForeignAssetUnfrozen { + asset_id: AssetId, + xcm_location: Location, + }, + } + + /// Mapping from an asset id to a Foreign asset type. + /// This is mostly used when receiving transaction specifying an asset directly, + /// like transferring an asset from this chain to another. + #[pallet::storage] + #[pallet::getter(fn assets_by_id)] + pub type AssetsById = + CountedStorageMap<_, Blake2_128Concat, AssetId, Location, OptionQuery>; + + /// Reverse mapping of AssetsById. Mapping from a foreign asset to an asset id. + /// This is mostly used when receiving a multilocation XCM message to retrieve + /// the corresponding asset in which tokens should me minted. + #[pallet::storage] + #[pallet::getter(fn assets_by_location)] + pub type AssetsByLocation = + StorageMap<_, Blake2_128Concat, Location, (AssetId, AssetStatus)>; + + impl Pallet { + /// The account ID of this pallet + #[inline] + pub fn account_id() -> H160 { + let account_id: T::AccountId = PALLET_ID.into_account_truncating(); + T::AccountIdToH160::convert(account_id) + } + + /// Compute asset contract address from asset id + #[inline] + pub(crate) fn contract_address_from_asset_id(asset_id: AssetId) -> H160 { + let mut buffer = [0u8; 20]; + buffer[..4].copy_from_slice(&FOREIGN_ASSETS_PREFIX); + buffer[4..].copy_from_slice(&asset_id.to_be_bytes()); + H160(buffer) + } + + /// Mint an asset into a specific account + pub fn mint_into( + asset_id: AssetId, + beneficiary: T::AccountId, + amount: U256, + ) -> Result<(), evm::EvmError> { + // We perform the evm call in a storage transaction to ensure that if it fail + // any contract storage changes are rolled back. + frame_support::storage::with_storage_layer(|| { + EvmCaller::::erc20_mint_into( + Self::contract_address_from_asset_id(asset_id), + T::AccountIdToH160::convert(beneficiary), + amount, + ) + }) + .map_err(Into::into) + } + } + + #[pallet::call] + impl Pallet { + /// Create new asset with the ForeignAssetCreator + #[pallet::call_index(0)] + #[pallet::weight(::WeightInfo::create_foreign_asset())] + pub fn create_foreign_asset( + origin: OriginFor, + asset_id: AssetId, + xcm_location: Location, + decimals: u8, + symbol: BoundedVec>, + name: BoundedVec>, + ) -> DispatchResult { + T::ForeignAssetCreatorOrigin::ensure_origin(origin)?; + + // Ensure such an assetId does not exist + ensure!( + !AssetsById::::contains_key(&asset_id), + Error::::AssetAlreadyExists + ); + + ensure!( + !AssetsByLocation::::contains_key(&xcm_location), + Error::::LocationAlreadyExists + ); + + ensure!( + AssetsById::::count() < T::MaxForeignAssets::get(), + Error::::TooManyForeignAssets + ); + + ensure!( + T::AssetIdFilter::contains(&asset_id), + Error::::AssetIdFiltered + ); + + let symbol = core::str::from_utf8(&symbol).map_err(|_| Error::::InvalidSymbol)?; + let name = core::str::from_utf8(&name).map_err(|_| Error::::InvalidTokenName)?; + + let contract_address = EvmCaller::::erc20_create(asset_id, decimals, symbol, name)?; + + // Insert the association assetId->foreigAsset + // Insert the association foreigAsset->assetId + AssetsById::::insert(&asset_id, &xcm_location); + AssetsByLocation::::insert(&xcm_location, (asset_id, AssetStatus::Active)); + + T::OnForeignAssetCreated::on_asset_created(&xcm_location, &asset_id); + + Self::deposit_event(Event::ForeignAssetCreated { + contract_address, + asset_id, + xcm_location, + }); + Ok(()) + } + + /// Change the xcm type mapping for a given assetId + /// We also change this if the previous units per second where pointing at the old + /// assetType + #[pallet::call_index(1)] + #[pallet::weight(::WeightInfo::change_xcm_location())] + pub fn change_xcm_location( + origin: OriginFor, + asset_id: AssetId, + new_xcm_location: Location, + ) -> DispatchResult { + T::ForeignAssetModifierOrigin::ensure_origin(origin)?; + + let previous_location = + AssetsById::::get(&asset_id).ok_or(Error::::AssetDoesNotExist)?; + + // Remove previous foreign asset info + let (_asset_id, asset_status) = AssetsByLocation::::take(&previous_location) + .ok_or(Error::::CorruptedStorageOrphanLocation)?; + + // Insert new foreign asset info + AssetsById::::insert(&asset_id, &new_xcm_location); + AssetsByLocation::::insert(&new_xcm_location, (asset_id, asset_status)); + + Self::deposit_event(Event::ForeignAssetXcmLocationChanged { + asset_id, + new_xcm_location, + }); + Ok(()) + } + + /// Freeze a given foreign assetId + #[pallet::call_index(2)] + #[pallet::weight(::WeightInfo::freeze_foreign_asset())] + pub fn freeze_foreign_asset( + origin: OriginFor, + asset_id: AssetId, + allow_xcm_deposit: bool, + ) -> DispatchResult { + T::ForeignAssetFreezerOrigin::ensure_origin(origin)?; + + let xcm_location = + AssetsById::::get(&asset_id).ok_or(Error::::AssetDoesNotExist)?; + + let (_asset_id, asset_status) = AssetsByLocation::::get(&xcm_location) + .ok_or(Error::::CorruptedStorageOrphanLocation)?; + + ensure!( + asset_status == AssetStatus::Active, + Error::::AssetAlreadyFrozen + ); + + EvmCaller::::erc20_pause(asset_id)?; + + let new_asset_status = if allow_xcm_deposit { + AssetStatus::FrozenXcmDepositAllowed + } else { + AssetStatus::FrozenXcmDepositForbidden + }; + + AssetsByLocation::::insert(&xcm_location, (asset_id, new_asset_status)); + + Self::deposit_event(Event::ForeignAssetFrozen { + asset_id, + xcm_location, + }); + Ok(()) + } + + /// Unfreeze a given foreign assetId + #[pallet::call_index(3)] + #[pallet::weight(::WeightInfo::unfreeze_foreign_asset())] + pub fn unfreeze_foreign_asset(origin: OriginFor, asset_id: AssetId) -> DispatchResult { + T::ForeignAssetUnfreezerOrigin::ensure_origin(origin)?; + + let xcm_location = + AssetsById::::get(&asset_id).ok_or(Error::::AssetDoesNotExist)?; + + let (_asset_id, asset_status) = AssetsByLocation::::get(&xcm_location) + .ok_or(Error::::CorruptedStorageOrphanLocation)?; + + ensure!( + asset_status == AssetStatus::FrozenXcmDepositAllowed + || asset_status == AssetStatus::FrozenXcmDepositForbidden, + Error::::AssetNotFrozen + ); + + EvmCaller::::erc20_unpause(asset_id)?; + + AssetsByLocation::::insert(&xcm_location, (asset_id, AssetStatus::Active)); + + Self::deposit_event(Event::ForeignAssetUnfrozen { + asset_id, + xcm_location, + }); + Ok(()) + } + } + + impl xcm_executor::traits::TransactAsset for Pallet { + // For optimization reasons, the asset we want to deposit has not really been withdrawn, + // we have just traced from which account it should have been withdrawn. + // So we will retrieve these information and make the transfer from the origin account. + fn deposit_asset(what: &Asset, who: &Location, _context: Option<&XcmContext>) -> XcmResult { + let (contract_address, amount, asset_status) = + ForeignAssetsMatcher::::match_asset(what)?; + + if let AssetStatus::FrozenXcmDepositForbidden = asset_status { + return Err(MatchError::AssetNotHandled.into()); + } + + let beneficiary = T::XcmLocationToH160::convert_location(who) + .ok_or(MatchError::AccountIdConversionFailed)?; + + // We perform the evm transfers in a storage transaction to ensure that if it fail + // any contract storage changes are rolled back. + frame_support::storage::with_storage_layer(|| { + EvmCaller::::erc20_mint_into(contract_address, beneficiary, amount) + })?; + + Ok(()) + } + + fn internal_transfer_asset( + asset: &Asset, + from: &Location, + to: &Location, + _context: &XcmContext, + ) -> Result { + let (contract_address, amount, asset_status) = + ForeignAssetsMatcher::::match_asset(asset)?; + + if let AssetStatus::FrozenXcmDepositForbidden | AssetStatus::FrozenXcmDepositAllowed = + asset_status + { + return Err(MatchError::AssetNotHandled.into()); + } + + let from = T::XcmLocationToH160::convert_location(from) + .ok_or(MatchError::AccountIdConversionFailed)?; + + let to = T::XcmLocationToH160::convert_location(to) + .ok_or(MatchError::AccountIdConversionFailed)?; + + // We perform the evm transfers in a storage transaction to ensure that if it fail + // any contract storage changes are rolled back. + frame_support::storage::with_storage_layer(|| { + EvmCaller::::erc20_transfer(contract_address, from, to, amount) + })?; + + Ok(asset.clone().into()) + } + + // Since we don't control the erc20 contract that manages the asset we want to withdraw, + // we can't really withdraw this asset, we can only transfer it to another account. + // It would be possible to transfer the asset to a dedicated account that would reflect + // the content of the xcm holding, but this would imply to perform two evm calls instead of + // one (1 to withdraw the asset and a second one to deposit it). + // In order to perform only one evm call, we just trace the origin of the asset, + // and then the transfer will only really be performed in the deposit instruction. + fn withdraw_asset( + what: &Asset, + who: &Location, + _context: Option<&XcmContext>, + ) -> Result { + let (contract_address, amount, asset_status) = + ForeignAssetsMatcher::::match_asset(what)?; + let who = T::XcmLocationToH160::convert_location(who) + .ok_or(MatchError::AccountIdConversionFailed)?; + + if let AssetStatus::FrozenXcmDepositForbidden | AssetStatus::FrozenXcmDepositAllowed = + asset_status + { + return Err(MatchError::AssetNotHandled.into()); + } + + // We perform the evm transfers in a storage transaction to ensure that if it fail + // any contract storage changes are rolled back. + frame_support::storage::with_storage_layer(|| { + EvmCaller::::erc20_burn_from(contract_address, who, amount) + })?; + + Ok(what.clone().into()) + } + } + + impl sp_runtime::traits::MaybeEquivalence for Pallet { + fn convert(location: &Location) -> Option { + AssetsByLocation::::get(location).map(|(asset_id, _)| asset_id) + } + fn convert_back(asset_id: &AssetId) -> Option { + AssetsById::::get(asset_id) + } + } +} diff --git a/pallets/moonbeam-foreign-assets/src/mock.rs b/pallets/moonbeam-foreign-assets/src/mock.rs new file mode 100644 index 0000000000..4f81769a24 --- /dev/null +++ b/pallets/moonbeam-foreign-assets/src/mock.rs @@ -0,0 +1,237 @@ +// Copyright 2024 Moonbeam Foundation. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use super::*; +use crate as pallet_moonbeam_foreign_assets; + +use frame_support::traits::Everything; +use frame_support::{construct_runtime, pallet_prelude::*, parameter_types}; +use frame_system::EnsureRoot; +use pallet_evm::SubstrateBlockHashMapping; +use precompile_utils::testing::MockAccount; +use sp_core::{H256, U256}; +use sp_runtime::traits::{BlakeTwo256, IdentityLookup}; +use sp_runtime::BuildStorage; +use xcm::latest::Location; + +pub type Balance = u128; + +type AccountId = MockAccount; +type Block = frame_system::mocking::MockBlock; + +construct_runtime!( + pub enum Test + { + System: frame_system, + Balances: pallet_balances, + Timestamp: pallet_timestamp, + EVM: pallet_evm, + EvmForeignAssets: pallet_moonbeam_foreign_assets, + } +); + +parameter_types! { + pub const BlockHashCount: u32 = 250; +} + +impl frame_system::Config for Test { + type BaseCallFilter = Everything; + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type RuntimeTask = RuntimeTask; + type Nonce = u64; + type Block = Block; + type RuntimeCall = RuntimeCall; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type BlockWeights = (); + type BlockLength = (); + type SS58Prefix = (); + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); +} + +parameter_types! { + pub const ExistentialDeposit: u128 = 0; +} +impl pallet_balances::Config for Test { + type MaxReserves = (); + type ReserveIdentifier = [u8; 4]; + type MaxLocks = (); + type Balance = Balance; + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); + type RuntimeHoldReason = (); + type FreezeIdentifier = (); + type MaxFreezes = (); + type RuntimeFreezeReason = (); +} + +parameter_types! { + pub const MinimumPeriod: u64 = 6000 / 2; +} + +impl pallet_timestamp::Config for Test { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +parameter_types! { + pub BlockGasLimit: U256 = U256::from(u64::MAX); + pub const WeightPerGas: Weight = Weight::from_parts(1, 0); + pub GasLimitPovSizeRatio: u64 = 16; + pub GasLimitStorageGrowthRatio: u64 = 366; +} + +impl pallet_evm::Config for Test { + type FeeCalculator = (); + type GasWeightMapping = pallet_evm::FixedGasWeightMapping; + type WeightPerGas = WeightPerGas; + type CallOrigin = pallet_evm::EnsureAddressRoot; + type WithdrawOrigin = pallet_evm::EnsureAddressNever; + type AddressMapping = AccountId; + type Currency = Balances; + type RuntimeEvent = RuntimeEvent; + type PrecompilesType = (); + type PrecompilesValue = (); + type Runner = pallet_evm::runner::stack::Runner; + type ChainId = (); + type BlockGasLimit = BlockGasLimit; + type OnChargeTransaction = (); + type FindAuthor = (); + type BlockHashMapping = SubstrateBlockHashMapping; + type OnCreate = (); + type GasLimitPovSizeRatio = GasLimitPovSizeRatio; + type SuicideQuickClearLimit = ConstU32<0>; + type GasLimitStorageGrowthRatio = GasLimitStorageGrowthRatio; + type Timestamp = Timestamp; + type WeightInfo = pallet_evm::weights::SubstrateWeight; +} + +/// Gets parameters of last `ForeignAssetCreatedHook::on_asset_created` hook invocation +pub fn get_asset_created_hook_invocation() -> Option<(ForeignAsset, AssetId)> +{ + storage::unhashed::get_raw(b"____on_foreign_asset_created") + .map(|output| Decode::decode(&mut output.as_slice()).expect("Decoding should work")) +} + +/// Notes down parameters of current `ForeignAssetCreatedHook::on_asset_created` hook invocation +fn note_on_asset_created_hook_invocation( + foreign_asset: &ForeignAsset, + asset_id: &AssetId, +) { + storage::unhashed::put_raw( + b"____on_foreign_asset_created", + (foreign_asset, asset_id).encode().as_slice(), + ); +} + +/// Test hook that records the hook invocation with exact params +pub struct NoteDownHook(PhantomData); + +impl ForeignAssetCreatedHook for NoteDownHook { + fn on_asset_created(foreign_asset: &ForeignAsset, asset_id: &AssetId) { + note_on_asset_created_hook_invocation(foreign_asset, asset_id); + } +} + +pub struct AccountIdToH160; +impl sp_runtime::traits::Convert for AccountIdToH160 { + fn convert(account_id: AccountId) -> H160 { + account_id.into() + } +} + +impl crate::Config for Test { + type AccountIdToH160 = AccountIdToH160; + type AssetIdFilter = Everything; + type EvmRunner = pallet_evm::runner::stack::Runner; + type ForeignAssetCreatorOrigin = EnsureRoot; + type ForeignAssetFreezerOrigin = EnsureRoot; + type ForeignAssetModifierOrigin = EnsureRoot; + type ForeignAssetUnfreezerOrigin = EnsureRoot; + type OnForeignAssetCreated = NoteDownHook; + type MaxForeignAssets = ConstU32<3>; + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + type XcmLocationToH160 = (); +} + +pub(crate) struct ExtBuilder { + // endowed accounts with balances + balances: Vec<(AccountId, Balance)>, +} + +impl Default for ExtBuilder { + fn default() -> ExtBuilder { + ExtBuilder { balances: vec![] } + } +} + +impl ExtBuilder { + pub(crate) fn build(self) -> sp_io::TestExternalities { + let mut t = frame_system::GenesisConfig::::default() + .build_storage() + .expect("Frame system builds valid default genesis config"); + + pallet_balances::GenesisConfig:: { + balances: self.balances, + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext + } +} + +pub(crate) fn events() -> Vec> { + System::events() + .into_iter() + .map(|r| r.event) + .filter_map(|e| { + if let RuntimeEvent::EvmForeignAssets(inner) = e { + Some(inner) + } else { + None + } + }) + .collect::>() +} + +pub fn expect_events(e: Vec>) { + assert_eq!(events(), e); +} diff --git a/pallets/moonbeam-foreign-assets/src/tests.rs b/pallets/moonbeam-foreign-assets/src/tests.rs new file mode 100644 index 0000000000..94f45990d8 --- /dev/null +++ b/pallets/moonbeam-foreign-assets/src/tests.rs @@ -0,0 +1,212 @@ +// Copyright 2024 Moonbeam Foundation. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use crate::*; +use mock::*; + +use frame_support::{assert_noop, assert_ok}; +use precompile_utils::testing::Bob; +use xcm::latest::prelude::*; + +fn encode_ticker(str_: &str) -> BoundedVec> { + BoundedVec::try_from(str_.as_bytes().to_vec()).expect("too long") +} + +fn encode_token_name(str_: &str) -> BoundedVec> { + BoundedVec::try_from(str_.as_bytes().to_vec()).expect("too long") +} + +#[test] +fn create_foreign_and_freeze_unfreeze() { + ExtBuilder::default().build().execute_with(|| { + // create foreign asset + assert_ok!(EvmForeignAssets::create_foreign_asset( + RuntimeOrigin::root(), + 1, + Location::parent(), + 18, + encode_ticker("MTT"), + encode_token_name("Mytoken"), + )); + + assert_eq!(EvmForeignAssets::assets_by_id(1), Some(Location::parent())); + assert_eq!( + EvmForeignAssets::assets_by_location(Location::parent()), + Some((1, AssetStatus::Active)), + ); + expect_events(vec![crate::Event::ForeignAssetCreated { + contract_address: H160([ + 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + ]), + asset_id: 1, + xcm_location: Location::parent(), + }]); + + let (xcm_location, asset_id): (Location, u128) = get_asset_created_hook_invocation() + .expect("Decoding of invocation data should not fail"); + assert_eq!(xcm_location, Location::parent()); + assert_eq!(asset_id, 1u128); + + // Check storage + assert_eq!(EvmForeignAssets::assets_by_id(&1), Some(Location::parent())); + assert_eq!( + EvmForeignAssets::assets_by_location(&Location::parent()), + Some((1, AssetStatus::Active)) + ); + + // Unfreeze should return AssetNotFrozen error + assert_noop!( + EvmForeignAssets::unfreeze_foreign_asset(RuntimeOrigin::root(), 1), + Error::::AssetNotFrozen + ); + + // Freeze should work + assert_ok!(EvmForeignAssets::freeze_foreign_asset( + RuntimeOrigin::root(), + 1, + true + ),); + assert_eq!( + EvmForeignAssets::assets_by_location(&Location::parent()), + Some((1, AssetStatus::FrozenXcmDepositAllowed)) + ); + + // Should not be able to freeze an asset already frozen + assert_noop!( + EvmForeignAssets::freeze_foreign_asset(RuntimeOrigin::root(), 1, true), + Error::::AssetAlreadyFrozen + ); + + // Unfreeze should work + assert_ok!(EvmForeignAssets::unfreeze_foreign_asset( + RuntimeOrigin::root(), + 1 + ),); + assert_eq!( + EvmForeignAssets::assets_by_location(&Location::parent()), + Some((1, AssetStatus::Active)) + ); + }); +} + +#[test] +fn test_asset_exists_error() { + ExtBuilder::default().build().execute_with(|| { + assert_ok!(EvmForeignAssets::create_foreign_asset( + RuntimeOrigin::root(), + 1, + Location::parent(), + 18, + encode_ticker("MTT"), + encode_token_name("Mytoken"), + )); + assert_eq!( + EvmForeignAssets::assets_by_id(1).unwrap(), + Location::parent() + ); + assert_noop!( + EvmForeignAssets::create_foreign_asset( + RuntimeOrigin::root(), + 1, + Location::parent(), + 18, + encode_ticker("MTT"), + encode_token_name("Mytoken"), + ), + Error::::AssetAlreadyExists + ); + }); +} + +#[test] +fn test_regular_user_cannot_call_extrinsics() { + ExtBuilder::default().build().execute_with(|| { + assert_noop!( + EvmForeignAssets::create_foreign_asset( + RuntimeOrigin::signed(Bob.into()), + 1, + Location::parent(), + 18, + encode_ticker("MTT"), + encode_token_name("Mytoken"), + ), + sp_runtime::DispatchError::BadOrigin + ); + + assert_noop!( + EvmForeignAssets::change_xcm_location( + RuntimeOrigin::signed(Bob.into()), + 1, + Location::parent() + ), + sp_runtime::DispatchError::BadOrigin + ); + }); +} + +#[test] +fn test_root_can_change_foreign_asset_for_asset_id() { + ExtBuilder::default().build().execute_with(|| { + assert_ok!(EvmForeignAssets::create_foreign_asset( + RuntimeOrigin::root(), + 1, + Location::parent(), + 18, + encode_ticker("MTT"), + encode_token_name("Mytoken"), + )); + + assert_ok!(EvmForeignAssets::change_xcm_location( + RuntimeOrigin::root(), + 1, + Location::here() + )); + + // New associations are stablished + assert_eq!(EvmForeignAssets::assets_by_id(1).unwrap(), Location::here()); + assert_eq!( + EvmForeignAssets::assets_by_location(Location::here()).unwrap(), + (1, AssetStatus::Active), + ); + + // Old ones are deleted + assert!(EvmForeignAssets::assets_by_location(Location::parent()).is_none()); + + expect_events(vec![ + crate::Event::ForeignAssetCreated { + contract_address: H160([ + 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + ]), + asset_id: 1, + xcm_location: Location::parent(), + }, + crate::Event::ForeignAssetXcmLocationChanged { + asset_id: 1, + new_xcm_location: Location::here(), + }, + ]) + }); +} + +#[test] +fn test_asset_id_non_existent_error() { + ExtBuilder::default().build().execute_with(|| { + assert_noop!( + EvmForeignAssets::change_xcm_location(RuntimeOrigin::root(), 1, Location::parent()), + Error::::AssetDoesNotExist + ); + }); +} diff --git a/pallets/moonbeam-foreign-assets/src/weights.rs b/pallets/moonbeam-foreign-assets/src/weights.rs new file mode 100644 index 0000000000..8b270fa1c5 --- /dev/null +++ b/pallets/moonbeam-foreign-assets/src/weights.rs @@ -0,0 +1,179 @@ +// Copyright 2024 Moonbeam Foundation. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Autogenerated weights for pallet_foreign_asset_creator +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2024-04-09, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `girazoki-XPS-15-9530`, CPU: `13th Gen Intel(R) Core(TM) i9-13900H` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 + +// Executed Command: +// ./target/release/moonbeam +// benchmark +// pallet +// --execution=wasm +// --wasm-execution=compiled +// --pallet +// pallet_moonbeam_foreign_assets +// --extrinsic +// * +// --steps +// 50 +// --repeat +// 20 +// --template=./benchmarking/frame-weight-template.hbs +// --json-file +// raw.json +// --output +// weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use sp_std::marker::PhantomData; + +/// Weight functions needed for pallet_foreign_asset_creator. +pub trait WeightInfo { + fn create_foreign_asset() -> Weight; + fn change_xcm_location() -> Weight; + fn freeze_foreign_asset() -> Weight; + fn unfreeze_foreign_asset() -> Weight; +} + +/// Weights for pallet_foreign_asset_creator using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) + /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ForeignAssets::Asset` (r:1 w:1) + /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) + /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) + /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn create_foreign_asset() -> Weight { + // Proof Size summary in bytes: + // Measured: `113` + // Estimated: `3673` + // Minimum execution time: 16_738_000 picoseconds. + Weight::from_parts(17_366_000, 3673) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) + /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:2) + /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn change_xcm_location() -> Weight { + // Proof Size summary in bytes: + // Measured: `189` + // Estimated: `3654` + // Minimum execution time: 13_861_000 picoseconds. + Weight::from_parts(14_153_000, 3654) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) + /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) + /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn freeze_foreign_asset() -> Weight { + // Proof Size summary in bytes: + // Measured: `189` + // Estimated: `3654` + // Minimum execution time: 11_698_000 picoseconds. + Weight::from_parts(12_184_000, 3654) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) + /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ForeignAssets::Asset` (r:1 w:1) + /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) + /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) + /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn unfreeze_foreign_asset() -> Weight { + // Proof Size summary in bytes: + // Measured: `429` + // Estimated: `3894` + // Minimum execution time: 17_797_000 picoseconds. + Weight::from_parts(18_635_000, 3894) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } +} + +// For backwards compatibility and tests +impl WeightInfo for () { + /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) + /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ForeignAssets::Asset` (r:1 w:1) + /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) + /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) + /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn create_foreign_asset() -> Weight { + // Proof Size summary in bytes: + // Measured: `113` + // Estimated: `3673` + // Minimum execution time: 16_738_000 picoseconds. + Weight::from_parts(17_366_000, 3673) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) + /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:2) + /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn change_xcm_location() -> Weight { + // Proof Size summary in bytes: + // Measured: `189` + // Estimated: `3654` + // Minimum execution time: 13_861_000 picoseconds. + Weight::from_parts(14_153_000, 3654) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) + /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) + /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn freeze_foreign_asset() -> Weight { + // Proof Size summary in bytes: + // Measured: `189` + // Estimated: `3654` + // Minimum execution time: 11_698_000 picoseconds. + Weight::from_parts(12_184_000, 3654) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) + /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ForeignAssets::Asset` (r:1 w:1) + /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) + /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) + /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn unfreeze_foreign_asset() -> Weight { + // Proof Size summary in bytes: + // Measured: `429` + // Estimated: `3894` + // Minimum execution time: 17_797_000 picoseconds. + Weight::from_parts(18_635_000, 3894) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } +} diff --git a/precompiles/foreign-asset-migrator/Cargo.toml b/precompiles/foreign-asset-migrator/Cargo.toml new file mode 100644 index 0000000000..84f349005a --- /dev/null +++ b/precompiles/foreign-asset-migrator/Cargo.toml @@ -0,0 +1,76 @@ +[package] +name = "precompile-foreign-asset-migrator" +authors = { workspace = true } +description = "A Precompile to expose Assets pallet through an ERC20-compliant interface." +edition = "2021" +version = "0.1.0" + +[dependencies] +log = { workspace = true } +num_enum = { workspace = true } +paste = { workspace = true } + +# Moonbeam +account = { workspace = true } +pallet-asset-manager = { workspace = true } +pallet-moonbeam-foreign-assets = { workspace = true } + +# Substrate +frame-support = { workspace = true } +frame-system = { workspace = true } +pallet-assets = { workspace = true } +pallet-balances = { workspace = true } +pallet-timestamp = { workspace = true } +parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } +scale-info = { workspace = true, features = ["derive"] } +sp-core = { workspace = true } +sp-io = { workspace = true } +sp-runtime = { workspace = true } +sp-std = { workspace = true } + +# Frontier +fp-evm = { workspace = true } +pallet-evm = { workspace = true, features = ["forbid-evm-reentrancy"] } +precompile-utils = { workspace = true } + +# Moonkit +moonkit-xcm-primitives = { workspace = true } + +# Polkadot / XCM +xcm = { workspace = true } + +[dev-dependencies] +derive_more = { workspace = true } +hex-literal = { workspace = true } +libsecp256k1 = { workspace = true } +serde = { workspace = true } +sha3 = { workspace = true } + +# Moonbeam +precompile-utils = { workspace = true, features = ["std", "testing"] } +pallet-timestamp = { workspace = true, features = ["std"] } +parity-scale-codec = { workspace = true, features = ["max-encoded-len", "std"] } +scale-info = { workspace = true, features = ["derive"] } +sp-runtime = { workspace = true, features = ["std"] } + +[features] +default = ["std"] +std = [ + "fp-evm/std", + "frame-support/std", + "frame-system/std", + "moonkit-xcm-primitives/std", + "pallet-assets/std", + "pallet-balances/std", + "pallet-evm/std", + "pallet-asset-manager/std", + "pallet-moonbeam-foreign-assets/std", + "pallet-timestamp/std", + "parity-scale-codec/std", + "precompile-utils/std", + "sp-core/std", + "sp-io/std", + "sp-runtime/std", + "sp-std/std", + "account/std", +] diff --git a/precompiles/foreign-asset-migrator/src/lib.rs b/precompiles/foreign-asset-migrator/src/lib.rs new file mode 100644 index 0000000000..0e3b0fb353 --- /dev/null +++ b/precompiles/foreign-asset-migrator/src/lib.rs @@ -0,0 +1,213 @@ +// Copyright 2024 Moonbeam Foundation. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] + +use core::fmt::Display; +use core::marker::PhantomData; +use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; +use frame_support::traits::OriginTrait; +use moonkit_xcm_primitives::AccountIdAssetIdConversion; +use pallet_evm::AddressMapping; +use precompile_utils::prelude::*; +use sp_core::{MaxEncodedLen, H160, U256}; +use sp_runtime::traits::{Dispatchable, StaticLookup}; +use xcm::latest::prelude::Location; + +pub type ForeignAssetInstance = (); + +/// Alias for the Balance type for old foreign assets +pub type BalanceOf = >::Balance; + +/// Alias for the Asset Id type for old foreign assets +pub type AssetIdOf = >::AssetId; + +pub struct ForeignAssetMigratorPrecompile(PhantomData); + +impl Clone for ForeignAssetMigratorPrecompile { + fn clone(&self) -> Self { + Self(PhantomData) + } +} + +impl Default for ForeignAssetMigratorPrecompile { + fn default() -> Self { + Self(PhantomData) + } +} + +impl ForeignAssetMigratorPrecompile { + pub fn new() -> Self { + Self(PhantomData) + } +} + +#[precompile_utils::precompile] +impl ForeignAssetMigratorPrecompile +where + Runtime: pallet_asset_manager::Config + + pallet_assets::Config + + pallet_evm::Config + + pallet_moonbeam_foreign_assets::Config + + frame_system::Config, + Runtime::RuntimeCall: Dispatchable + GetDispatchInfo, + Runtime::RuntimeCall: From>, + ::RuntimeOrigin: From>, + BalanceOf: TryFrom + Into + solidity::Codec, + Runtime: AccountIdAssetIdConversion>, + <::RuntimeCall as Dispatchable>::RuntimeOrigin: OriginTrait, + AssetIdOf: Display, + Runtime::AccountId: Into, + ::ForeignAssetType: Into>, +{ + #[precompile::public("migrateAccounts(address,uint32)")] + fn migrate_accounts( + handle: &mut impl PrecompileHandle, + asset_address: Address, + n: u32, + ) -> EvmResult { + let new_asset_id = Self::get_new_asset_id_with_same_xcm_location(handle, asset_address)?; + + // Account proof size for N accounts keys + // Storage item: Account + // Key1: Blake2_128(16) + AssetId(16) + // Key2: Blake2_128(16) + AccountId(20) + handle.record_db_read::(68 * n as usize)?; + + // Get N account ids + // IMPORTANT: we can't mutate storage while iterating, that's why we collect N accounts ids + // in a Vec BEFORE processing them! + let accounts_ids = + pallet_assets::pallet::Account::::iter_key_prefix( + new_asset_id, + ) + .take(n as usize) + .collect::>(); + + // Refound gas if there is less than N accounts + if accounts_ids.len() < n as usize { + let n_diff = ((n as usize) - accounts_ids.len()) as u64; + handle.refund_external_cost( + Some(n_diff * RuntimeHelper::::db_read_gas_cost()), + Some(n_diff * 68), + ); + } + + // IMPORTANT: we can't mutate storage while iterating, that's why we collect N accounts ids + // in a Vec BEFORE processing them! + let mut counter = 0; + for account_id in accounts_ids { + Self::migrate_account_inner(handle, new_asset_id, account_id.into())?; + counter += 1; + } + + Ok(U256([counter, 0, 0, 0])) + } + + #[precompile::public("migrateAccount(address,address)")] + fn migrate_account( + handle: &mut impl PrecompileHandle, + asset_address: Address, + account: Address, + ) -> EvmResult<()> { + let new_asset_id = Self::get_new_asset_id_with_same_xcm_location(handle, asset_address)?; + + Self::migrate_account_inner(handle, new_asset_id, account.into())?; + + Ok(()) + } + + fn get_new_asset_id_with_same_xcm_location( + handle: &mut impl PrecompileHandle, + asset_address: Address, + ) -> EvmResult { + let asset_address: H160 = asset_address.into(); + + let asset_address = Runtime::AddressMapping::into_account_id(asset_address); + + // compute asset id from asset address + let asset_id = match Runtime::account_to_asset_id(asset_address) { + Some((_, asset_id)) => asset_id, + None => return Err(revert("invalid asset address")), + }; + + // Storage item: AssetIdType + // key: Blake2_128(16) + AssetId(16) + // value: XCMv3 Location + handle.record_db_read::(32 + xcm::v3::Location::max_encoded_len())?; + + // Get asset XCM location + let asset_type = pallet_asset_manager::Pallet::::asset_id_type(&asset_id) + .ok_or(revert("asset id doesn't exist"))?; + let xcm_location = asset_type.into().ok_or(revert("invalid XCM Location"))?; + + // Storage item: AssetsByLocation + // key: Blake2_128(16) + XCM latest Location + // value: AssetId(16) + AssetStatus(1) + handle.record_db_read::(33 + Location::max_encoded_len())?; + + // Get new asset id + let (new_asset_id, _) = + pallet_moonbeam_foreign_assets::Pallet::::assets_by_location(&xcm_location) + .ok_or(revert("new foreign asset doesn't exist"))?; + + Ok(new_asset_id) + } + + fn migrate_account_inner( + handle: &mut impl PrecompileHandle, + new_asset_id: u128, + account: H160, + ) -> EvmResult<()> { + let account_id = Runtime::AddressMapping::into_account_id(account); + + // Storage item: Account + // Key1: Blake2_128(16) + AssetId(16) + // key2: Blake2_128(16) + AccountId(20) + // Value: AssetAccount(19 + Extra) + handle.record_db_read::( + 87 + >::Extra::max_encoded_len(), + )?; + + // Get old asset balance + let amount = pallet_assets::Pallet::::balance( + new_asset_id, + &account_id, + ); + + // Burn account balance on hold foreign asset + RuntimeHelper::::try_dispatch( + handle, + Some(pallet_asset_manager::Pallet::::account_id()).into(), + pallet_assets::Call::::burn { + id: new_asset_id.into(), + who: Runtime::Lookup::unlookup(account_id.clone()), + amount, + }, + 0, + )?; + + // Mint same balance for new asset + pallet_moonbeam_foreign_assets::Pallet::::mint_into( + new_asset_id, + account_id, + amount.into(), + ) + .map_err(|_| revert("fail to mint new foreign asset"))?; + + Ok(()) + } +} diff --git a/primitives/xcm/src/ethereum_xcm.rs b/primitives/xcm/src/ethereum_xcm.rs index 8aee89c34a..ba1e13f7d0 100644 --- a/primitives/xcm/src/ethereum_xcm.rs +++ b/primitives/xcm/src/ethereum_xcm.rs @@ -79,7 +79,7 @@ pub struct EthereumXcmTransactionV1 { pub gas_limit: U256, /// Fee configuration of choice. pub fee_payment: EthereumXcmFee, - /// Either a Call (the callee, account or contract address) or Create (currently unsupported). + /// Either a Call (the callee, account or contract address) or Create (unsupported for v1). pub action: TransactionAction, /// Value to be transfered. pub value: U256, @@ -93,7 +93,7 @@ pub struct EthereumXcmTransactionV1 { pub struct EthereumXcmTransactionV2 { /// Gas limit to be consumed by EVM execution. pub gas_limit: U256, - /// Either a Call (the callee, account or contract address) or Create (currently unsupported). + /// Either a Call (the callee, account or contract address) or Create). pub action: TransactionAction, /// Value to be transfered. pub value: U256, @@ -104,20 +104,34 @@ pub struct EthereumXcmTransactionV2 { } pub trait XcmToEthereum { - fn into_transaction_v2(&self, nonce: U256, chain_id: u64) -> Option; + fn into_transaction_v2( + &self, + nonce: U256, + chain_id: u64, + allow_create: bool, + ) -> Option; } impl XcmToEthereum for EthereumXcmTransaction { - fn into_transaction_v2(&self, nonce: U256, chain_id: u64) -> Option { + fn into_transaction_v2( + &self, + nonce: U256, + chain_id: u64, + allow_create: bool, + ) -> Option { match self { - EthereumXcmTransaction::V1(v1_tx) => v1_tx.into_transaction_v2(nonce, chain_id), - EthereumXcmTransaction::V2(v2_tx) => v2_tx.into_transaction_v2(nonce, chain_id), + EthereumXcmTransaction::V1(v1_tx) => { + v1_tx.into_transaction_v2(nonce, chain_id, allow_create) + } + EthereumXcmTransaction::V2(v2_tx) => { + v2_tx.into_transaction_v2(nonce, chain_id, allow_create) + } } } } impl XcmToEthereum for EthereumXcmTransactionV1 { - fn into_transaction_v2(&self, nonce: U256, chain_id: u64) -> Option { + fn into_transaction_v2(&self, nonce: U256, chain_id: u64, _: bool) -> Option { // We dont support creates for now if self.action == TransactionAction::Create { return None; @@ -195,9 +209,14 @@ impl XcmToEthereum for EthereumXcmTransactionV1 { } impl XcmToEthereum for EthereumXcmTransactionV2 { - fn into_transaction_v2(&self, nonce: U256, chain_id: u64) -> Option { - // We dont support creates for now - if self.action == TransactionAction::Create { + fn into_transaction_v2( + &self, + nonce: U256, + chain_id: u64, + allow_create: bool, + ) -> Option { + if !allow_create && self.action == TransactionAction::Create { + // Create not allowed return None; } let from_tuple_to_access_list = |t: &Vec<(H160, Vec)>| -> AccessList { @@ -274,7 +293,10 @@ mod tests { s: H256::from_low_u64_be(1u64), })); - assert_eq!(xcm_transaction.into_transaction_v2(nonce, 111), expected_tx); + assert_eq!( + xcm_transaction.into_transaction_v2(nonce, 111, false), + expected_tx + ); } #[test] @@ -302,7 +324,10 @@ mod tests { signature: TransactionSignature::new(42, rs_id(), rs_id()).unwrap(), })); - assert_eq!(xcm_transaction.into_transaction_v2(nonce, 111), expected_tx); + assert_eq!( + xcm_transaction.into_transaction_v2(nonce, 111, false), + expected_tx + ); } #[test] fn test_eip_2930_v1() { @@ -344,7 +369,10 @@ mod tests { s: H256::from_low_u64_be(1u64), })); - assert_eq!(xcm_transaction.into_transaction_v2(nonce, 111), expected_tx); + assert_eq!( + xcm_transaction.into_transaction_v2(nonce, 111, false), + expected_tx + ); } #[test] @@ -373,6 +401,9 @@ mod tests { s: H256::from_low_u64_be(1u64), })); - assert_eq!(xcm_transaction.into_transaction_v2(nonce, 111), expected_tx); + assert_eq!( + xcm_transaction.into_transaction_v2(nonce, 111, false), + expected_tx + ); } } diff --git a/runtime/common/src/impl_moonbeam_xcm_call_tracing.rs b/runtime/common/src/impl_moonbeam_xcm_call_tracing.rs index 08d2b06f13..ffddb3b88f 100644 --- a/runtime/common/src/impl_moonbeam_xcm_call_tracing.rs +++ b/runtime/common/src/impl_moonbeam_xcm_call_tracing.rs @@ -78,7 +78,8 @@ macro_rules! impl_moonbeam_xcm_call_tracing { EthereumXcmTracingStatus::Transaction(traced_transaction_hash) => { let transaction_hash = xcm_transaction.into_transaction_v2( EthereumXcm::nonce(), - ::ChainId::get() + ::ChainId::get(), + false ) .expect("Invalid transaction conversion") .hash(); diff --git a/runtime/common/src/impl_xcm_evm_runner.rs b/runtime/common/src/impl_xcm_evm_runner.rs index 7eebe42d63..07102147e1 100644 --- a/runtime/common/src/impl_xcm_evm_runner.rs +++ b/runtime/common/src/impl_xcm_evm_runner.rs @@ -165,6 +165,60 @@ macro_rules! impl_evm_runner_precompile_or_eth_xcm { unimplemented!() } + fn create_force_address( + source: H160, + init: Vec, + value: U256, + gas_limit: u64, + max_fee_per_gas: Option, + max_priority_fee_per_gas: Option, + nonce: Option, + access_list: Vec<(H160, Vec)>, + is_transactional: bool, + validate: bool, + weight_limit: Option, + transaction_len: Option, + config: &fp_evm::Config, + force_address: H160, + ) -> Result> { + let xcm_transaction = EthereumXcmTransaction::V2(EthereumXcmTransactionV2 { + gas_limit: gas_limit.into(), + action: pallet_ethereum_xcm::TransactionAction::Create, + value, + input: init.try_into().map_err(|_| RunnerError { + error: DispatchError::Exhausted, + weight: Default::default(), + })?, + access_list: Some(access_list), + }); + + let mut execution_info: Option = None; + pallet_ethereum::catch_exec_info(&mut execution_info, || { + CallDispatcher::dispatch( + RuntimeCall::EthereumXcm(pallet_ethereum_xcm::Call::force_transact_as { + transact_as: source, + xcm_transaction, + force_create_address: Some(force_address), + }), + RawOrigin::Root.into(), + ) + .map_err(|DispatchErrorWithPostInfo { error, .. }| RunnerError { + error, + weight: Default::default(), + }) + })?; + + if let Some(CallOrCreateInfo::Create(create_info))= execution_info { + Ok(create_info) + } else { + // `execution_info` must have been filled in + Err(RunnerError { + error: DispatchError::Unavailable, + weight: Default::default(), + }) + } + } + fn validate( _source: H160, _target: Option, diff --git a/runtime/moonbase/Cargo.toml b/runtime/moonbase/Cargo.toml index ab0da95932..6a419be470 100644 --- a/runtime/moonbase/Cargo.toml +++ b/runtime/moonbase/Cargo.toml @@ -37,6 +37,7 @@ pallet-ethereum-xcm = { workspace = true } pallet-evm-chain-id = { workspace = true } pallet-maintenance-mode = { workspace = true, features = ["xcm-support"] } pallet-migrations = { workspace = true } +pallet-moonbeam-foreign-assets = { workspace = true } pallet-moonbeam-lazy-migrations = { workspace = true } pallet-moonbeam-orbiters = { workspace = true } pallet-parachain-staking = { workspace = true } @@ -68,6 +69,7 @@ pallet-evm-precompile-xcm-utils = { workspace = true } pallet-evm-precompile-xtokens = { workspace = true } pallet-evm-precompileset-assets-erc20 = { workspace = true } pallet-evm-precompile-p256verify = { workspace = true } +precompile-foreign-asset-migrator = { workspace = true } # Moonbeam tracing evm-tracing-events = { workspace = true, optional = true } @@ -265,6 +267,7 @@ std = [ "pallet-identity/std", "pallet-maintenance-mode/std", "pallet-migrations/std", + "pallet-moonbeam-foreign-assets/std", "pallet-moonbeam-lazy-migrations/std", "pallet-moonbeam-orbiters/std", "pallet-multisig/std", diff --git a/runtime/moonbase/src/asset_config.rs b/runtime/moonbase/src/asset_config.rs index 27b87c4c3a..8aa9e2979e 100644 --- a/runtime/moonbase/src/asset_config.rs +++ b/runtime/moonbase/src/asset_config.rs @@ -20,8 +20,8 @@ use crate::OpenTechCommitteeInstance; use super::{ - currency, governance, xcm_config, AccountId, AssetId, AssetManager, Assets, Balance, Balances, - Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, + currency, governance, xcm_config, AccountId, AssetId, Assets, Balance, Balances, Runtime, + RuntimeCall, RuntimeEvent, RuntimeOrigin, FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, }; use moonbeam_runtime_common::weights as moonbeam_weights; @@ -124,7 +124,7 @@ impl pallet_asset_manager::AssetRegistrar for AssetRegistrar { Assets::force_create( RuntimeOrigin::root(), asset.into(), - AssetManager::account_id(), + crate::AssetManager::account_id(), is_sufficient, min_balance, )?; diff --git a/runtime/moonbase/src/lib.rs b/runtime/moonbase/src/lib.rs index 25a6fd1049..7e91abe345 100644 --- a/runtime/moonbase/src/lib.rs +++ b/runtime/moonbase/src/lib.rs @@ -732,6 +732,7 @@ impl pallet_ethereum_xcm::Config for Runtime { type ReservedXcmpWeight = ReservedXcmpWeight; type EnsureProxy = EthereumXcmEnsureProxy; type ControllerOrigin = EnsureRoot; + type ForceOrigin = EnsureRoot; } parameter_types! { @@ -1439,6 +1440,7 @@ construct_runtime! { PrecompileBenchmarks: pallet_precompile_benchmarks::{Pallet} = 53, MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 54, EmergencyParaXcm: pallet_emergency_para_xcm::{Pallet, Call, Storage, Event} = 55, + EvmForeignAssets: pallet_moonbeam_foreign_assets::{Pallet, Call, Storage, Event} = 56, } } diff --git a/runtime/moonbase/src/precompiles.rs b/runtime/moonbase/src/precompiles.rs index c6c21084cd..9d8290f8ca 100644 --- a/runtime/moonbase/src/precompiles.rs +++ b/runtime/moonbase/src/precompiles.rs @@ -58,6 +58,7 @@ use pallet_evm_precompile_xcm_utils::{AllExceptXcmExecute, XcmUtilsPrecompile}; use pallet_evm_precompile_xtokens::XtokensPrecompile; use pallet_evm_precompileset_assets_erc20::Erc20AssetsPrecompileSet; use pallet_precompile_benchmarks::WeightInfo; +use precompile_foreign_asset_migrator::ForeignAssetMigratorPrecompile; use precompile_utils::precompile_set::*; use sp_std::prelude::*; use xcm_primitives::AsAssetType; @@ -278,6 +279,7 @@ type MoonbasePrecompilesAt = ( PalletXcmPrecompile, (CallableByContract, CallableByPrecompile), >, + PrecompileAt, ForeignAssetMigratorPrecompile, ()>, ); pub struct DisabledLocalAssets(sp_std::marker::PhantomData); diff --git a/runtime/moonbase/src/xcm_config.rs b/runtime/moonbase/src/xcm_config.rs index 46520ad988..3a1e44e24e 100644 --- a/runtime/moonbase/src/xcm_config.rs +++ b/runtime/moonbase/src/xcm_config.rs @@ -19,9 +19,9 @@ use super::{ governance, AccountId, AssetId, AssetManager, Balance, Balances, DealWithFees, - EmergencyParaXcm, Erc20XcmBridge, MaintenanceMode, MessageQueue, ParachainInfo, - ParachainSystem, Perbill, PolkadotXcm, Runtime, RuntimeBlockWeights, RuntimeCall, RuntimeEvent, - RuntimeOrigin, Treasury, XcmpQueue, + EmergencyParaXcm, Erc20XcmBridge, EvmForeignAssets, MaintenanceMode, MessageQueue, + ParachainInfo, ParachainSystem, Perbill, PolkadotXcm, Runtime, RuntimeBlockWeights, + RuntimeCall, RuntimeEvent, RuntimeOrigin, Treasury, XcmpQueue, }; use crate::OpenTechCommitteeInstance; use moonbeam_runtime_common::weights as moonbeam_weights; @@ -171,6 +171,7 @@ pub type LocalAssetTransactor = XcmCurrencyAdapter< // we import https://github.com/open-web3-stack/open-runtime-module-library/pull/708 pub type AssetTransactors = ( LocalAssetTransactor, + EvmForeignAssets, ForeignFungiblesTransactor, Erc20XcmBridge, ); @@ -619,7 +620,10 @@ impl orml_xtokens::Config for Runtime { type Balance = Balance; type CurrencyId = CurrencyId; type AccountIdToLocation = AccountIdToLocation; - type CurrencyIdConvert = CurrencyIdToLocation>; + type CurrencyIdConvert = CurrencyIdToLocation<( + EvmForeignAssets, + AsAssetType, + )>; type XcmExecutor = XcmExecutor; type SelfLocation = SelfLocation; type Weigher = XcmWeigher; @@ -694,7 +698,10 @@ impl pallet_xcm_transactor::Config for Runtime { type SovereignAccountDispatcherOrigin = EnsureRoot; type CurrencyId = CurrencyId; type AccountIdToLocation = AccountIdToLocation; - type CurrencyIdToLocation = CurrencyIdToLocation>; + type CurrencyIdToLocation = CurrencyIdToLocation<( + EvmForeignAssets, + AsAssetType, + )>; type XcmSender = XcmRouter; type SelfLocation = SelfLocation; type Weigher = XcmWeigher; @@ -731,6 +738,46 @@ impl pallet_erc20_xcm_bridge::Config for Runtime { type EvmRunner = EvmRunnerPrecompileOrEthXcm; } +pub struct AccountIdToH160; +impl sp_runtime::traits::Convert for AccountIdToH160 { + fn convert(account_id: AccountId) -> H160 { + account_id.into() + } +} + +pub struct EvmForeignAssetIdFilter; +impl frame_support::traits::Contains for EvmForeignAssetIdFilter { + fn contains(asset_id: &AssetId) -> bool { + use xcm_primitives::AssetTypeGetter as _; + // We should return true only if the AssetId doesn't exist in AssetManager + AssetManager::get_asset_type(*asset_id).is_none() + } +} + +pub type ForeignAssetManagerOrigin = EitherOfDiverse< + EnsureRoot, + EitherOfDiverse< + pallet_collective::EnsureProportionMoreThan, + governance::custom_origins::FastGeneralAdmin, + >, +>; + +impl pallet_moonbeam_foreign_assets::Config for Runtime { + type AccountIdToH160 = AccountIdToH160; + type AssetIdFilter = EvmForeignAssetIdFilter; + type EvmRunner = EvmRunnerPrecompileOrEthXcm; + type ForeignAssetCreatorOrigin = ForeignAssetManagerOrigin; + type ForeignAssetFreezerOrigin = ForeignAssetManagerOrigin; + type ForeignAssetModifierOrigin = ForeignAssetManagerOrigin; + type ForeignAssetUnfreezerOrigin = ForeignAssetManagerOrigin; + type OnForeignAssetCreated = (); + type MaxForeignAssets = ConstU32<256>; + type RuntimeEvent = RuntimeEvent; + // TODO generate weights + type WeightInfo = (); + type XcmLocationToH160 = LocationToH160; +} + #[cfg(feature = "runtime-benchmarks")] mod testing { use super::*; diff --git a/runtime/moonbase/tests/common/mod.rs b/runtime/moonbase/tests/common/mod.rs index cd3a0cfe0c..19df108ab7 100644 --- a/runtime/moonbase/tests/common/mod.rs +++ b/runtime/moonbase/tests/common/mod.rs @@ -22,11 +22,10 @@ use frame_support::{ assert_ok, traits::{OnFinalize, OnInitialize}, }; -use moonbase_runtime::{asset_config::AssetRegistrarMetadata, xcm_config::AssetType}; pub use moonbase_runtime::{ - currency::UNIT, AccountId, AssetId, AssetManager, Assets, AsyncBacking, AuthorInherent, - Balance, Ethereum, InflationInfo, ParachainStaking, Range, Runtime, RuntimeCall, RuntimeEvent, - System, TransactionConverter, UncheckedExtrinsic, HOURS, + currency::UNIT, AccountId, AsyncBacking, AuthorInherent, Balance, Ethereum, EvmForeignAssets, + InflationInfo, ParachainStaking, Range, Runtime, RuntimeCall, RuntimeEvent, System, + TransactionConverter, UncheckedExtrinsic, HOURS, }; use nimbus_primitives::{NimbusId, NIMBUS_ENGINE_ID}; use polkadot_parachain::primitives::HeadData; @@ -107,10 +106,12 @@ pub fn last_event() -> RuntimeEvent { // Test struct with the purpose of initializing xcm assets #[derive(Clone)] pub struct XcmAssetInitialization { - pub asset_type: AssetType, - pub metadata: AssetRegistrarMetadata, + pub asset_id: u128, + pub xcm_location: xcm::v4::Location, + pub decimals: u8, + pub name: &'static str, + pub symbol: &'static str, pub balances: Vec<(AccountId, Balance)>, - pub is_sufficient: bool, } pub struct ExtBuilder { @@ -291,23 +292,31 @@ impl ExtBuilder { ext.execute_with(|| { // If any xcm assets specified, we register them here for xcm_asset_initialization in xcm_assets { - let asset_id: AssetId = xcm_asset_initialization.asset_type.clone().into(); - AssetManager::register_foreign_asset( + let asset_id = xcm_asset_initialization.asset_id; + EvmForeignAssets::create_foreign_asset( root_origin(), - xcm_asset_initialization.asset_type, - xcm_asset_initialization.metadata, - 1, - xcm_asset_initialization.is_sufficient, + asset_id, + xcm_asset_initialization.xcm_location, + xcm_asset_initialization.decimals, + xcm_asset_initialization + .symbol + .as_bytes() + .to_vec() + .try_into() + .expect("too long"), + xcm_asset_initialization + .name + .as_bytes() + .to_vec() + .try_into() + .expect("too long"), ) - .unwrap(); + .expect("fail to create foreign asset"); + for (account, balance) in xcm_asset_initialization.balances { - Assets::mint( - origin_of(AssetManager::account_id()), - asset_id.into(), - account, - balance, - ) - .unwrap(); + if EvmForeignAssets::mint_into(asset_id, account, balance.into()).is_err() { + panic!("fail to mint foreign asset"); + } } } System::set_block_number(1); diff --git a/runtime/moonbase/tests/integration_test.rs b/runtime/moonbase/tests/integration_test.rs index 02f6464275..2619e2c7cf 100644 --- a/runtime/moonbase/tests/integration_test.rs +++ b/runtime/moonbase/tests/integration_test.rs @@ -37,13 +37,30 @@ use frame_support::{ StorageHasher, Twox128, }; use moonbase_runtime::{ - asset_config::{AssetRegistrarMetadata, ForeignAssetInstance}, - xcm_config::{AssetType, SelfReserve}, - AccountId, AssetId, AssetManager, Assets, Balances, CrowdloanRewards, Executive, - OpenTechCommitteeCollective, ParachainStaking, PolkadotXcm, Precompiles, Runtime, - RuntimeBlockWeights, RuntimeCall, RuntimeEvent, System, TransactionPayment, - TransactionPaymentAsGasPrice, TreasuryCouncilCollective, XTokens, XcmTransactor, - FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, WEEKS, + //asset_config::ForeignAssetInstance, + xcm_config::SelfReserve, + AccountId, + AssetId, + Balances, + CrowdloanRewards, + EvmForeignAssets, + Executive, + OpenTechCommitteeCollective, + ParachainStaking, + PolkadotXcm, + Precompiles, + Runtime, + RuntimeBlockWeights, + RuntimeCall, + RuntimeEvent, + System, + TransactionPayment, + TransactionPaymentAsGasPrice, + TreasuryCouncilCollective, + XTokens, + XcmTransactor, + FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, + WEEKS, }; use polkadot_parachain::primitives::Sibling; use precompile_utils::testing::MockHandle; @@ -60,13 +77,16 @@ use moonbeam_xcm_benchmarks::weights::XcmWeight; use moonkit_xcm_primitives::AccountIdAssetIdConversion; use nimbus_primitives::NimbusId; use pallet_evm::PrecompileSet; -use pallet_evm_precompileset_assets_erc20::{SELECTOR_LOG_APPROVAL, SELECTOR_LOG_TRANSFER}; +//use pallet_evm_precompileset_assets_erc20::{SELECTOR_LOG_APPROVAL, SELECTOR_LOG_TRANSFER}; +use pallet_moonbeam_foreign_assets::AssetStatus; use pallet_transaction_payment::Multiplier; use pallet_xcm_transactor::{Currency, CurrencyPayment, HrmpOperation, TransactWeights}; use parity_scale_codec::Encode; use sha3::{Digest, Keccak256}; use sp_core::{crypto::UncheckedFrom, ByteArray, Pair, H160, H256, U256}; -use sp_runtime::{DispatchError, ModuleError}; +use sp_runtime::{bounded_vec, DispatchError, ModuleError}; +use std::cell::Cell; +use std::rc::Rc; use xcm::latest::prelude::*; type AuthorMappingPCall = @@ -79,10 +99,10 @@ type XcmUtilsPCall = pallet_evm_precompile_xcm_utils::XcmUtilsPrecompileCall< moonbase_runtime::xcm_config::XcmExecutorConfig, >; type XtokensPCall = pallet_evm_precompile_xtokens::XtokensPrecompileCall; -type ForeignAssetsPCall = pallet_evm_precompileset_assets_erc20::Erc20AssetsPrecompileSetCall< +/*type ForeignAssetsPCall = pallet_evm_precompileset_assets_erc20::Erc20AssetsPrecompileSetCall< Runtime, ForeignAssetInstance, ->; +>;*/ type XcmTransactorV1PCall = pallet_evm_precompile_xcm_transactor::v1::XcmTransactorPrecompileV1Call; type XcmTransactorV2PCall = @@ -1249,40 +1269,64 @@ fn update_reward_address_via_precompile() { } #[test] -fn asset_can_be_registered() { +fn create_and_manipulate_foreign_asset() { ExtBuilder::default().build().execute_with(|| { - let source_location = AssetType::Xcm(xcm::v3::Location::parent()); - let source_id: moonbase_runtime::AssetId = source_location.clone().into(); - let asset_metadata = AssetRegistrarMetadata { - name: b"RelayToken".to_vec(), - symbol: b"Relay".to_vec(), - decimals: 12, - is_frozen: false, - }; - assert_ok!(AssetManager::register_foreign_asset( + let source_location = xcm::v4::Location::parent(); + + // Create foreign asset + assert_ok!(EvmForeignAssets::create_foreign_asset( moonbase_runtime::RuntimeOrigin::root(), - source_location, - asset_metadata, - 1u128, - true, + 1, + source_location.clone(), + 12, + bounded_vec![b'M', b'T'], + bounded_vec![b'M', b'y', b'T', b'o', b'k'], )); - assert!(AssetManager::asset_id_type(source_id).is_some()); + assert_eq!( + EvmForeignAssets::assets_by_id(1), + Some(source_location.clone()) + ); + assert_eq!( + EvmForeignAssets::assets_by_location(&source_location), + Some((1, AssetStatus::Active)) + ); + + // Freeze foreign asset + assert_ok!(EvmForeignAssets::freeze_foreign_asset( + moonbase_runtime::RuntimeOrigin::root(), + 1, + true + )); + assert_eq!( + EvmForeignAssets::assets_by_location(&source_location), + Some((1, AssetStatus::FrozenXcmDepositAllowed)) + ); + + // Unfreeze foreign asset + assert_ok!(EvmForeignAssets::unfreeze_foreign_asset( + moonbase_runtime::RuntimeOrigin::root(), + 1, + )); + assert_eq!( + EvmForeignAssets::assets_by_location(&source_location), + Some((1, AssetStatus::Active)) + ); }); } +// The precoompile asset-erc20 is deprecated and not used anymore for new evm foreign assets +// We don't have testing tools in rust test to call real evm smart contract, so we rely on ts tests. +/* #[test] fn xcm_asset_erc20_precompiles_supply_and_balance() { ExtBuilder::default() .with_xcm_assets(vec![XcmAssetInitialization { - asset_type: AssetType::Xcm(xcm::v3::Location::parent()), - metadata: AssetRegistrarMetadata { - name: b"RelayToken".to_vec(), - symbol: b"Relay".to_vec(), - decimals: 12, - is_frozen: false, - }, + asset_id: 1, + xcm_location: xcm::v4::Location::parent(), + name: "RelayToken", + symbol: "Relay", + decimals: 12, balances: vec![(AccountId::from(ALICE), 1_000 * UNIT)], - is_sufficient: true, }]) .with_balances(vec![ (AccountId::from(ALICE), 2_000 * UNIT), @@ -1332,15 +1376,12 @@ fn xcm_asset_erc20_precompiles_supply_and_balance() { fn xcm_asset_erc20_precompiles_transfer() { ExtBuilder::default() .with_xcm_assets(vec![XcmAssetInitialization { - asset_type: AssetType::Xcm(xcm::v3::Location::parent()), - metadata: AssetRegistrarMetadata { - name: b"RelayToken".to_vec(), - symbol: b"Relay".to_vec(), - decimals: 12, - is_frozen: false, - }, + asset_id: 1, + xcm_location: xcm::v4::Location::parent(), + name: "RelayToken", + symbol: "Relay", + decimals: 12, balances: vec![(AccountId::from(ALICE), 1_000 * UNIT)], - is_sufficient: true, }]) .with_balances(vec![ (AccountId::from(ALICE), 2_000 * UNIT), @@ -1396,15 +1437,12 @@ fn xcm_asset_erc20_precompiles_transfer() { fn xcm_asset_erc20_precompiles_approve() { ExtBuilder::default() .with_xcm_assets(vec![XcmAssetInitialization { - asset_type: AssetType::Xcm(xcm::v3::Location::parent()), - metadata: AssetRegistrarMetadata { - name: b"RelayToken".to_vec(), - symbol: b"Relay".to_vec(), - decimals: 12, - is_frozen: false, - }, + asset_id: 1, + xcm_location: xcm::v4::Location::parent(), + name: "RelayToken", + symbol: "Relay", + decimals: 12, balances: vec![(AccountId::from(ALICE), 1_000 * UNIT)], - is_sufficient: true, }]) .with_balances(vec![ (AccountId::from(ALICE), 2_000 * UNIT), @@ -1475,21 +1513,18 @@ fn xcm_asset_erc20_precompiles_approve() { .expect_no_logs() .execute_returns(U256::from(400 * UNIT)); }); -} +}*/ #[test] fn xtokens_precompiles_transfer() { ExtBuilder::default() .with_xcm_assets(vec![XcmAssetInitialization { - asset_type: AssetType::Xcm(xcm::v3::Location::parent()), - metadata: AssetRegistrarMetadata { - name: b"RelayToken".to_vec(), - symbol: b"Relay".to_vec(), - decimals: 12, - is_frozen: false, - }, - balances: vec![(AccountId::from(ALICE), 1_000_000_000_000_000)], - is_sufficient: true, + asset_id: 1, + xcm_location: xcm::v4::Location::parent(), + name: "RelayToken", + symbol: "Relay", + decimals: 12, + balances: vec![(AccountId::from(ALICE), 1_000 * UNIT)], }]) .with_balances(vec![ (AccountId::from(ALICE), 2_000 * UNIT), @@ -1501,7 +1536,7 @@ fn xtokens_precompiles_transfer() { let xtokens_precompile_address = H160::from_low_u64_be(2052); // We have the assetId that corresponds to the relay chain registered - let relay_asset_id: AssetId = AssetType::Xcm(xcm::v3::Location::parent()).into(); + let relay_asset_id: AssetId = 1; // Its address is let asset_precompile_address = Runtime::asset_id_to_account( @@ -1518,6 +1553,9 @@ fn xtokens_precompiles_transfer() { }], ); + let inside = Rc::new(Cell::new(false)); + let inside2 = inside.clone(); + // We use the address of the asset as an identifier of the asset we want to transfer Precompiles::new() .prepare_test( @@ -1530,8 +1568,47 @@ fn xtokens_precompiles_transfer() { weight: 4_000_000, }, ) - .expect_cost(57639) + .expect_cost(209239) .expect_no_logs() + // We expect an evm subcall ERC20.burnFrom + .with_subcall_handle(move |subcall| { + let Subcall { + address, + transfer, + input, + target_gas: _, + is_static, + context, + } = subcall; + + assert_eq!(context.caller, EvmForeignAssets::account_id().into()); + assert_eq!( + address, + [255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1].into() + ); + assert_eq!(is_static, false); + + assert!(transfer.is_none()); + + assert_eq!( + context.address, + [255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1].into() + ); + assert_eq!(context.apparent_value, 0u8.into()); + + assert_eq!(&input[..4], &keccak256!("burnFrom(address,uint256)")[..4]); + assert_eq!(&input[4..16], &[0u8; 12]); + assert_eq!(&input[16..36], ALICE); + + inside2.set(true); + + SubcallOutput { + output: Default::default(), + cost: 149_000, + logs: vec![], + ..SubcallOutput::succeed() + } + }) .execute_returns(()) }) } @@ -1540,15 +1617,12 @@ fn xtokens_precompiles_transfer() { fn xtokens_precompiles_transfer_multiasset() { ExtBuilder::default() .with_xcm_assets(vec![XcmAssetInitialization { - asset_type: AssetType::Xcm(xcm::v3::Location::parent()), - metadata: AssetRegistrarMetadata { - name: b"RelayToken".to_vec(), - symbol: b"Relay".to_vec(), - decimals: 12, - is_frozen: false, - }, - balances: vec![(AccountId::from(ALICE), 1_000_000_000_000_000)], - is_sufficient: true, + asset_id: 1, + xcm_location: xcm::v4::Location::parent(), + name: "RelayToken", + symbol: "Relay", + decimals: 12, + balances: vec![(AccountId::from(ALICE), 1_000 * UNIT)], }]) .with_balances(vec![ (AccountId::from(ALICE), 2_000 * UNIT), @@ -1568,6 +1642,9 @@ fn xtokens_precompiles_transfer_multiasset() { }], ); + let inside = Rc::new(Cell::new(false)); + let inside2 = inside.clone(); + // This time we transfer it through TransferMultiAsset // Instead of the address, we encode directly the multilocation referencing the asset Precompiles::new() @@ -1582,9 +1659,51 @@ fn xtokens_precompiles_transfer_multiasset() { weight: 4_000_000, }, ) - .expect_cost(57639) + .expect_cost(209239) .expect_no_logs() + // We expect an evm subcall ERC20.burnFrom + .with_subcall_handle(move |subcall| { + let Subcall { + address, + transfer, + input, + target_gas: _, + is_static, + context, + } = subcall; + + assert_eq!(context.caller, EvmForeignAssets::account_id().into()); + assert_eq!( + address, + [255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1].into() + ); + assert_eq!(is_static, false); + + assert!(transfer.is_none()); + + assert_eq!( + context.address, + [255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1].into() + ); + assert_eq!(context.apparent_value, 0u8.into()); + + assert_eq!(&input[..4], &keccak256!("burnFrom(address,uint256)")[..4]); + assert_eq!(&input[4..16], &[0u8; 12]); + assert_eq!(&input[16..36], ALICE); + + inside2.set(true); + + SubcallOutput { + output: Default::default(), + cost: 149_000, + logs: vec![], + ..SubcallOutput::succeed() + } + }) .execute_returns(()); + + // Ensure that the subcall was actually called. + assert!(inside.get(), "subcall not called"); }) } @@ -1950,19 +2069,15 @@ fn root_can_change_default_xcm_vers() { (AccountId::from(BOB), 1_000 * UNIT), ]) .with_xcm_assets(vec![XcmAssetInitialization { - asset_type: AssetType::Xcm(xcm::v3::Location::parent()), - metadata: AssetRegistrarMetadata { - name: b"RelayToken".to_vec(), - symbol: b"Relay".to_vec(), - decimals: 12, - is_frozen: false, - }, + asset_id: 1, + xcm_location: xcm::v4::Location::parent(), + name: "RelayToken", + symbol: "Relay", + decimals: 12, balances: vec![(AccountId::from(ALICE), 1_000_000_000_000_000)], - is_sufficient: true, }]) .build() .execute_with(|| { - let source_location = AssetType::Xcm(xcm::v3::Location::parent()); let dest = Location { parents: 1, interior: [AccountId32 { @@ -1971,7 +2086,7 @@ fn root_can_change_default_xcm_vers() { }] .into(), }; - let source_id: moonbase_runtime::AssetId = source_location.clone().into(); + let source_id: moonbase_runtime::AssetId = 1; // Default XCM version is not set yet, so xtokens should fail because it does not // know with which version to send assert_noop!( @@ -1980,7 +2095,7 @@ fn root_can_change_default_xcm_vers() { moonbase_runtime::xcm_config::CurrencyId::ForeignAsset(source_id), 100_000_000_000_000, Box::new(xcm::VersionedLocation::V4(dest.clone())), - WeightLimit::Limited(4000000000.into()) + WeightLimit::Unlimited ), orml_xtokens::Error::::XcmExecutionFailed ); @@ -1988,7 +2103,7 @@ fn root_can_change_default_xcm_vers() { // Root sets the defaultXcm assert_ok!(PolkadotXcm::force_default_xcm_version( root_origin(), - Some(2) + Some(4) )); // Now transferring does not fail @@ -1997,7 +2112,7 @@ fn root_can_change_default_xcm_vers() { moonbase_runtime::xcm_config::CurrencyId::ForeignAsset(source_id), 100_000_000_000_000, Box::new(xcm::VersionedLocation::V4(dest)), - WeightLimit::Limited(4000000000.into()) + WeightLimit::Unlimited )); }) } @@ -2010,20 +2125,16 @@ fn transactor_cannot_use_more_than_max_weight() { (AccountId::from(BOB), 1_000 * UNIT), ]) .with_xcm_assets(vec![XcmAssetInitialization { - asset_type: AssetType::Xcm(xcm::v3::Location::parent()), - metadata: AssetRegistrarMetadata { - name: b"RelayToken".to_vec(), - symbol: b"Relay".to_vec(), - decimals: 12, - is_frozen: false, - }, + asset_id: 1, + xcm_location: xcm::v4::Location::parent(), + name: "RelayToken", + symbol: "Relay", + decimals: 12, balances: vec![(AccountId::from(ALICE), 1_000_000_000_000_000)], - is_sufficient: true, }]) .build() .execute_with(|| { - let source_location = AssetType::Xcm(xcm::v3::Location::parent()); - let source_id: moonbase_runtime::AssetId = source_location.clone().into(); + let source_id: moonbase_runtime::AssetId = 1; assert_ok!(XcmTransactor::register( root_origin(), AccountId::from(ALICE), @@ -2538,7 +2649,7 @@ fn precompile_existence() { let precompile_addresses: std::collections::BTreeSet<_> = vec![ 1, 2, 3, 4, 5, 6, 7, 8, 9, 256, 1024, 1025, 1026, 1027, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, - 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, + 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, ] .into_iter() .map(H160::from_low_u64_be) diff --git a/runtime/moonbase/tests/xcm_mock/parachain.rs b/runtime/moonbase/tests/xcm_mock/parachain.rs index 732352952f..56271b1502 100644 --- a/runtime/moonbase/tests/xcm_mock/parachain.rs +++ b/runtime/moonbase/tests/xcm_mock/parachain.rs @@ -1058,6 +1058,7 @@ impl pallet_ethereum_xcm::Config for Runtime { type ReservedXcmpWeight = ReservedXcmpWeight; type EnsureProxy = EthereumXcmEnsureProxy; type ControllerOrigin = EnsureRoot; + type ForceOrigin = EnsureRoot; } type Block = frame_system::mocking::MockBlockU32; diff --git a/runtime/moonbeam/src/lib.rs b/runtime/moonbeam/src/lib.rs index 04091d1af9..d7f3c63cdd 100644 --- a/runtime/moonbeam/src/lib.rs +++ b/runtime/moonbeam/src/lib.rs @@ -742,6 +742,7 @@ impl pallet_ethereum_xcm::Config for Runtime { type ReservedXcmpWeight = ReservedXcmpWeight; type EnsureProxy = EthereumXcmEnsureProxy; type ControllerOrigin = EnsureRoot; + type ForceOrigin = EnsureRoot; } parameter_types! { @@ -1453,6 +1454,8 @@ construct_runtime! { Erc20XcmBridge: pallet_erc20_xcm_bridge::{Pallet} = 110, MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 111, RelayStorageRoots: pallet_relay_storage_roots::{Pallet, Storage} = 112, + + // TODO should not be included in production PrecompileBenchmarks: pallet_precompile_benchmarks::{Pallet} = 113, // Randomness diff --git a/runtime/moonbeam/tests/xcm_mock/parachain.rs b/runtime/moonbeam/tests/xcm_mock/parachain.rs index 377c2b3192..6e2572b8c6 100644 --- a/runtime/moonbeam/tests/xcm_mock/parachain.rs +++ b/runtime/moonbeam/tests/xcm_mock/parachain.rs @@ -1043,6 +1043,7 @@ impl pallet_ethereum_xcm::Config for Runtime { type ReservedXcmpWeight = ReservedXcmpWeight; type EnsureProxy = EthereumXcmEnsureProxy; type ControllerOrigin = EnsureRoot; + type ForceOrigin = EnsureRoot; } type Block = frame_system::mocking::MockBlockU32; diff --git a/runtime/moonriver/src/lib.rs b/runtime/moonriver/src/lib.rs index aa3cddfad8..8af95824c7 100644 --- a/runtime/moonriver/src/lib.rs +++ b/runtime/moonriver/src/lib.rs @@ -716,6 +716,7 @@ impl pallet_ethereum_xcm::Config for Runtime { type ReservedXcmpWeight = ReservedXcmpWeight; type EnsureProxy = EthereumXcmEnsureProxy; type ControllerOrigin = EnsureRoot; + type ForceOrigin = EnsureRoot; } parameter_types! { diff --git a/runtime/moonriver/tests/xcm_mock/parachain.rs b/runtime/moonriver/tests/xcm_mock/parachain.rs index b6c3489548..2228c3f125 100644 --- a/runtime/moonriver/tests/xcm_mock/parachain.rs +++ b/runtime/moonriver/tests/xcm_mock/parachain.rs @@ -1049,6 +1049,7 @@ impl pallet_ethereum_xcm::Config for Runtime { type ReservedXcmpWeight = ReservedXcmpWeight; type EnsureProxy = EthereumXcmEnsureProxy; type ControllerOrigin = EnsureRoot; + type ForceOrigin = EnsureRoot; } type Block = frame_system::mocking::MockBlockU32; diff --git a/test/helpers/assets.ts b/test/helpers/assets.ts index 21885f409f..c4b47f6a7b 100644 --- a/test/helpers/assets.ts +++ b/test/helpers/assets.ts @@ -6,12 +6,16 @@ import { blake2AsU8a, xxhashAsU8a } from "@polkadot/util-crypto"; import { KeyringPair } from "@polkadot/keyring/types"; import type { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import type { AccountId20 } from "@polkadot/types/interfaces/runtime"; +import { encodeFunctionData, parseAbi } from "viem"; + +export const EVM_FOREIGN_ASSETS_PALLET_ACCOUNT = "0x6d6f646c666f7267617373740000000000000000"; +export const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; export const DUMMY_REVERT_BYTECODE = "0x60006000fd"; export const RELAY_SOURCE_LOCATION = { Xcm: { parents: 1, interior: "Here" } }; export const RELAY_SOURCE_LOCATION2 = { Xcm: { parents: 2, interior: "Here" } }; export const RELAY_V3_SOURCE_LOCATION = { V3: { parents: 1, interior: "Here" } } as any; -export const PARA_1000_SOURCE_LOCATION = { +export const PARA_1000_SOURCE_LOCATION_V3 = { Xcm: { parents: 1, interior: { X1: { Parachain: 1000 } } }, }; export const PARA_2000_SOURCE_LOCATION = { @@ -21,6 +25,9 @@ export const PARA_1001_SOURCE_LOCATION = { Xcm: { parents: 1, interior: { X1: { Parachain: 1001 } } }, }; +// XCM V4 Locations +export const RELAY_SOURCE_LOCATION_V4 = { parents: 1, interior: { here: null } }; +export const PARA_1000_SOURCE_LOCATION_V4 = { parents: 1, interior: { X1: [{ Parachain: 1000 }] } }; export interface AssetMetadata { name: string; symbol: string; @@ -35,7 +42,151 @@ export const relayAssetMetadata: AssetMetadata = { isFrozen: false, }; +export function assetContractAddress(assetId: bigint | string): `0x${string}` { + return `0xffffffff${BigInt(assetId).toString(16)}`; +} + +// This registers an old foreign asset via the asset-manager pallet. +// DEPRECATED: Please don't use for new tests +export async function registerOldForeignAsset( + context: DevModeContext, + asset: any, + metadata: AssetMetadata, + unitsPerSecond?: number, + numAssetsWeightHint?: number +) { + unitsPerSecond = unitsPerSecond != null ? unitsPerSecond : 0; + const { result } = await context.createBlock( + context + .polkadotJs() + .tx.sudo.sudo( + context.polkadotJs().tx.assetManager.registerForeignAsset(asset, metadata, new BN(1), true) + ) + ); + // Look for assetId in events + const registeredAssetId = result!.events + .find(({ event: { section } }) => section.toString() === "assetManager")! + .event.data[0].toHex() + .replace(/,/g, ""); + + // setAssetUnitsPerSecond + const { result: result2 } = await context.createBlock( + context + .polkadotJs() + .tx.sudo.sudo( + context + .polkadotJs() + .tx.assetManager.setAssetUnitsPerSecond(asset, unitsPerSecond, numAssetsWeightHint!) + ), + { + expectEvents: [context.polkadotJs().events.assetManager.UnitsPerSecondChanged], + allowFailures: false, + } + ); + // check asset in storage + const registeredAsset = ( + (await context.polkadotJs().query.assets.asset(registeredAssetId)) as any + ).unwrap(); + return { + registeredAssetId, + events: result2!.events, + registeredAsset, + }; +} + +/** + * This registers a foreign asset via the moonbeam-foreign-assets pallet. + * This call will deploy the contract and make the erc20 contract of the asset available + * in the following address: 0xffffffff + metadata.id + */ +export async function registerForeignAsset( + context: DevModeContext, + assetId: bigint, + xcmLocation: any, + metadata: AssetMetadata +) { + const { decimals, name, symbol } = metadata; + const { result } = await context.createBlock( + context + .polkadotJs() + .tx.sudo.sudo( + context + .polkadotJs() + .tx.evmForeignAssets.createForeignAsset(assetId, xcmLocation, decimals, symbol, name) + ) + ); + + // Fetch the relevant event + const event = (result as any).events.find( + ({ event: { method } }) => method.toString() === "ForeignAssetCreated" + )!.event; + + // Get relevant info from the asset creation event + const contractAddress = event.data[0].toHuman().toString(); + const registeredAssetLocation = event.data[2].toString(); + const registeredAssetId = event.data[1].toString(); + + return { + registeredAssetId, + contractAddress, + registeredAssetLocation, + events: (result as any).events || [], + }; +} + +export async function foreignAssetBalance( + context: DevModeContext, + assetId: bigint, + account: `0x${string}` +) { + return (await context.viem().readContract({ + functionName: "balanceOf", + address: assetContractAddress(assetId), + args: [account], + abi: parseAbi(["function balanceOf(address account) view returns (uint256)"]), + })) as bigint; +} + export async function mockAssetBalance( + context: DevModeContext, + assetBalance: bigint, + assetId: bigint, + assetLocation: any, + sudoAccount: KeyringPair, + account: string | AccountId20 +) { + const api = context.polkadotJs(); + // Register the asset + await registerForeignAsset(context, assetId, RELAY_SOURCE_LOCATION, relayAssetMetadata); + + const xcmTransaction = { + V2: { + gas_limit: 160_000n, + action: { + Call: assetContractAddress(assetId), + }, + value: 0n, + input: encodeFunctionData({ + abi: parseAbi(["function mintInto(address, uint256)"]), + functionName: "mintInto", + args: [account, assetBalance], + }), + access_list: null, + }, + }; + await context.createBlock( + api.tx.sudo + .sudo( + api.tx.ethereumXcm.forceTransactAs(EVM_FOREIGN_ASSETS_PALLET_ACCOUNT, xcmTransaction, null) + ) + .signAsync(sudoAccount) + ); + return; +} + +// Mock balance for old foreign assets +// DEPRECATED: Please don't use for new tests +export async function mockOldAssetBalance( context: DevModeContext, assetBalance: PalletAssetsAssetAccount, assetDetails: PalletAssetsAssetDetails, diff --git a/test/helpers/xcm.ts b/test/helpers/xcm.ts index 63675960f2..12bedafe88 100644 --- a/test/helpers/xcm.ts +++ b/test/helpers/xcm.ts @@ -1,6 +1,6 @@ import { DevModeContext, customDevRpcRequest } from "@moonwall/cli"; import { ALITH_ADDRESS } from "@moonwall/util"; -import { AssetMetadata, XcmpMessageFormat } from "@polkadot/types/interfaces"; +import { XcmpMessageFormat } from "@polkadot/types/interfaces"; import { CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, XcmV3JunctionNetworkId, @@ -72,52 +72,6 @@ export function mockHrmpChannelExistanceTx( .tx.system.setStorage([[u8aToHex(overallKey), u8aToHex(stateToInsert.toU8a())]]); } -export async function registerForeignAsset( - context: DevModeContext, - asset: any, - metadata: AssetMetadata, - unitsPerSecond?: number, - numAssetsWeightHint?: number -) { - unitsPerSecond = unitsPerSecond != null ? unitsPerSecond : 0; - const { result } = await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo( - context.polkadotJs().tx.assetManager.registerForeignAsset(asset, metadata, new BN(1), true) - ) - ); - // Look for assetId in events - const registeredAssetId = result!.events - .find(({ event: { section } }) => section.toString() === "assetManager")! - .event.data[0].toHex() - .replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { result: result2 } = await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo( - context - .polkadotJs() - .tx.assetManager.setAssetUnitsPerSecond(asset, unitsPerSecond, numAssetsWeightHint!) - ), - { - expectEvents: [context.polkadotJs().events.assetManager.UnitsPerSecondChanged], - allowFailures: false, - } - ); - // check asset in storage - const registeredAsset = ( - (await context.polkadotJs().query.assets.asset(registeredAssetId)) as any - ).unwrap(); - return { - registeredAssetId, - events: result2!.events, - registeredAsset, - }; -} - export function descendOriginFromAddress20( context: DevModeContext, address: `0x${string}` = "0x0101010101010101010101010101010101010101", diff --git a/test/suites/dev/moonbase/test-assets/test-assets-destroy.ts b/test/suites/dev/moonbase/test-assets/test-assets-destroy.ts deleted file mode 100644 index c7c956eeb5..0000000000 --- a/test/suites/dev/moonbase/test-assets/test-assets-destroy.ts +++ /dev/null @@ -1,69 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, BALTATHAR_ADDRESS, alith, baltathar } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { u128 } from "@polkadot/types"; -import type { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; -import { expectOk, mockAssetBalance } from "../../../../helpers"; - -const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; - -describeSuite({ - id: "D010101", - title: "Pallet Assets - Destruction", - foundationMethods: "dev", - testCases: ({ context, it, log }) => { - let assetId: u128; - let api: ApiPromise; - beforeAll(async () => { - api = context.polkadotJs(); - assetId = api.createType("u128", ARBITRARY_ASSET_ID); - // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet - // And we need relay tokens for issuing a transaction to be executed in the relay - const balance = api.createType("Balance", 100000000000000); - const assetBalance: PalletAssetsAssetAccount = api.createType("PalletAssetsAssetAccount", { - balance: balance, - }); - - const assetDetails: PalletAssetsAssetDetails = api.createType("PalletAssetsAssetDetails", { - supply: balance, - }); - - await mockAssetBalance(context, assetBalance, assetDetails, alith, assetId, ALITH_ADDRESS); - await context.createBlock(api.tx.assets.transfer(assetId, baltathar.address, 1000)); - }); - - it({ - id: "T01", - title: "should destroy asset Balance", - test: async function () { - const metadataBefore = await context.polkadotJs().query.assets.metadata(assetId.toU8a()); - - // Name is equal to "DOT" in hex - expect(metadataBefore.name.toString()).to.eq("0x444f54"); - - // assetDetails before in non-empty - const assetDetailsBefore = await api.query.assets.asset(assetId.toU8a()); - expect(assetDetailsBefore.isNone).to.eq(false); - - // Destroy asset - await expectOk(context.createBlock(api.tx.sudo.sudo(api.tx.assets.startDestroy(assetId)))); - await expectOk(context.createBlock(api.tx.assets.destroyAccounts(assetId))); - await expectOk(context.createBlock(api.tx.assets.destroyApprovals(assetId))); - await expectOk(context.createBlock(api.tx.assets.finishDestroy(assetId))); - - // Baltathar balance is None - const baltatharBalance = await api.query.assets.account(assetId.toU8a(), BALTATHAR_ADDRESS); - expect(baltatharBalance.isNone).to.eq(true); - - // metadata is default - const metadata = await api.query.assets.metadata(assetId.toU8a()); - expect(metadata.name.toString()).to.eq("0x"); - - // assetDetails is None - const assetDetails = await api.query.assets.asset(assetId.toU8a()); - expect(assetDetails.isNone).to.eq(true); - }, - }); - }, -}); diff --git a/test/suites/dev/moonbase/test-assets/test-assets-drain-asset.ts b/test/suites/dev/moonbase/test-assets/test-assets-drain-asset.ts deleted file mode 100644 index 13ad449aec..0000000000 --- a/test/suites/dev/moonbase/test-assets/test-assets-drain-asset.ts +++ /dev/null @@ -1,123 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, alith, baltathar, generateKeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { u128 } from "@polkadot/types"; -import type { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; -import { BN } from "@polkadot/util"; -import { mockAssetBalance } from "../../../../helpers"; - -const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; -const ARBITRARY_TRANSFER_AMOUNT = 10000000000000n; - -describeSuite({ - id: "D010102", - title: "Pallet Assets - Sufficient tests: is_sufficient to true", - foundationMethods: "dev", - testCases: ({ context, it, log }) => { - let assetId: u128; - const freshAccount = generateKeyringPair(); - let api: ApiPromise; - - beforeAll(async () => { - api = context.polkadotJs(); - assetId = api.createType("u128", ARBITRARY_ASSET_ID); - // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet - // And we need relay tokens for issuing a transaction to be executed in the relay - const balance = new BN("100000000000000"); - const assetBalance: PalletAssetsAssetAccount = api.createType("PalletAssetsAssetAccount", { - balance: balance, - }); - - const assetDetails: PalletAssetsAssetDetails = api.createType("PalletAssetsAssetDetails", { - supply: balance, - isSufficient: true, - minBalance: 1, - }); - - await mockAssetBalance( - context, - assetBalance, - assetDetails, - alith, - assetId, - ALITH_ADDRESS, - true - ); - - await context.createBlock(); - const alithBalance = await api.query.assets.account(assetId.toU8a(), ALITH_ADDRESS); - expect(alithBalance.unwrap().balance.toBigInt()).to.equal(100000000000000n); - }); - - it({ - id: "T01", - title: "Send MOVR and assets to an account, then drain assets, dont drain MOVR", - test: async function () { - // We are going to use a fresh account here, since we mocked the asset balance - // We transfer Assets to freshAccount, which should increase sufficients - - await context.createBlock( - api.tx.assets.transfer(assetId, freshAccount.address, ARBITRARY_TRANSFER_AMOUNT) - ); - - expect( - (await api.query.system.account(freshAccount.address as string)).sufficients.toBigInt() - ).to.eq(1n); - // Providers should still be 0 - expect( - (await api.query.system.account(freshAccount.address as string)).providers.toBigInt() - ).to.eq(0n); - - // Lets transfer it the native token. We want to transfer enough to cover for a future fee. - const fee = ( - await api.tx.assets - .transfer(assetId, baltathar.address, ARBITRARY_TRANSFER_AMOUNT) - .paymentInfo(freshAccount) - ).partialFee.toBigInt(); - - await context.createBlock(api.tx.balances.transferAllowDeath(freshAccount.address, fee)); - - expect( - (await api.query.system.account(freshAccount.address as string)).sufficients.toBigInt() - ).to.eq(1n); - // Providers should now be 1 - expect( - (await api.query.system.account(freshAccount.address as string)).providers.toBigInt() - ).to.eq(1n); - - // When we execute transaction, both MOVR and Assets should be drained - await context.createBlock( - api.tx.assets - .transfer(assetId, baltathar.address, ARBITRARY_TRANSFER_AMOUNT) - .signAsync(freshAccount) - ); - - const freshAccountBalance = await api.query.assets.account( - assetId.toU8a(), - freshAccount.address as string - ); - expect(freshAccountBalance.isNone).to.equal(true); - - // Sufficients should go to 0 - expect( - (await api.query.system.account(freshAccount.address as string)).sufficients.toBigInt() - ).to.eq(0n); - // Providers should be 1 - expect( - (await api.query.system.account(freshAccount.address as string)).providers.toBigInt() - ).to.eq(1n); - - // Nonce should be 1 - expect( - (await api.query.system.account(freshAccount.address as string)).providers.toBigInt() - ).to.eq(1n); - - // But balance of MOVR should be 0 - expect( - (await api.query.system.account(freshAccount.address as string)).data.free.toBigInt() > 0n - ).to.eq(true); - }, - }); - }, -}); diff --git a/test/suites/dev/moonbase/test-assets/test-assets-drain-both.ts b/test/suites/dev/moonbase/test-assets/test-assets-drain-both.ts index b60b3dace7..efff16e71c 100644 --- a/test/suites/dev/moonbase/test-assets/test-assets-drain-both.ts +++ b/test/suites/dev/moonbase/test-assets/test-assets-drain-both.ts @@ -5,7 +5,7 @@ import { ApiPromise } from "@polkadot/api"; import { u128 } from "@polkadot/types"; import type { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { BN } from "@polkadot/util"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; const ARBITRARY_TRANSFER_AMOUNT = 10000000000000n; @@ -35,7 +35,7 @@ describeSuite({ minBalance: 1, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-assets/test-assets-insufficients.ts b/test/suites/dev/moonbase/test-assets/test-assets-insufficients.ts index 4381fa0e61..84f7891909 100644 --- a/test/suites/dev/moonbase/test-assets/test-assets-insufficients.ts +++ b/test/suites/dev/moonbase/test-assets/test-assets-insufficients.ts @@ -5,7 +5,7 @@ import { ApiPromise } from "@polkadot/api"; import { u128 } from "@polkadot/types"; import type { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { BN } from "@polkadot/util"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; const ARBITRARY_TRANSFER_AMOUNT = 10000000000000n; @@ -35,15 +35,7 @@ describeSuite({ minBalance: 1, }); - await mockAssetBalance( - context, - assetBalance, - assetDetails, - alith, - assetId, - ALITH_ADDRESS, - false - ); + await mockOldAssetBalance(context, assetBalance, assetDetails, alith, assetId, ALITH_ADDRESS); await context.createBlock(); const alithBalance = await api.query.assets.account(assetId.toU8a(), ALITH_ADDRESS); diff --git a/test/suites/dev/moonbase/test-assets/test-assets-transfer.ts b/test/suites/dev/moonbase/test-assets/test-assets-transfer.ts index 5c3effcc85..d6f3d19c7c 100644 --- a/test/suites/dev/moonbase/test-assets/test-assets-transfer.ts +++ b/test/suites/dev/moonbase/test-assets/test-assets-transfer.ts @@ -5,7 +5,7 @@ import "@polkadot/api-augment"; import { u128 } from "@polkadot/types"; import { ApiPromise } from "@polkadot/api"; import type { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; @@ -30,7 +30,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance(context, assetBalance, assetDetails, alith, assetId, ALITH_ADDRESS); + await mockOldAssetBalance(context, assetBalance, assetDetails, alith, assetId, ALITH_ADDRESS); }); it({ diff --git a/test/suites/dev/moonbase/test-assets/test-change-existing-asset.ts b/test/suites/dev/moonbase/test-assets/test-change-existing-asset.ts deleted file mode 100644 index 7c9746e0b0..0000000000 --- a/test/suites/dev/moonbase/test-assets/test-change-existing-asset.ts +++ /dev/null @@ -1,73 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { BN, bnToHex } from "@polkadot/util"; -import { - PARA_1000_SOURCE_LOCATION, - RELAY_SOURCE_LOCATION, - registerForeignAsset, - relayAssetMetadata, - verifyLatestBlockFees, -} from "../../../../helpers"; - -const palletId = "0x6D6f646c617373746d6E67720000000000000000"; -describeSuite({ - id: "D010106", - title: "XCM - asset manager - Change existing asset", - foundationMethods: "dev", - testCases: ({ context, log, it }) => { - let assetId: string; - let api: ApiPromise; - beforeAll(async function () { - api = context.polkadotJs(); - const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( - context, - RELAY_SOURCE_LOCATION, - relayAssetMetadata as any, - 1 - ); - assetId = registeredAssetId; - expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[5].event.method.toString()).to.eq("ExtrinsicSuccess"); - expect(registeredAsset.owner.toString()).to.eq(palletId); - - await verifyLatestBlockFees(context); - }); - - it({ - id: "T01", - title: "should change the asset Id", - test: async function () { - // ChangeAssetType - await context.createBlock( - api.tx.sudo.sudo( - api.tx.assetManager.changeExistingAssetType(assetId, PARA_1000_SOURCE_LOCATION, 1) - ) - ); - - // asset_type - const assetType = (await context - .polkadotJs() - .query.assetManager.assetIdType(assetId)) as object; - - // assetId - const id = (await api.query.assetManager.assetTypeId(PARA_1000_SOURCE_LOCATION)).unwrap(); - - // asset units per second changed - const assetUnitsPerSecond = ( - await api.query.assetManager.assetTypeUnitsPerSecond(PARA_1000_SOURCE_LOCATION) - ).unwrap(); - - // Supported assets - const supportedAssets = await api.query.assetManager.supportedFeePaymentAssets(); - - expect(assetUnitsPerSecond.toString()).to.eq(new BN(1).toString()); - expect(assetType.toString()).to.eq(JSON.stringify(PARA_1000_SOURCE_LOCATION).toLowerCase()); - expect(bnToHex(id)).to.eq(assetId); - expect(supportedAssets[0].toString()).to.eq( - JSON.stringify(PARA_1000_SOURCE_LOCATION).toLowerCase() - ); - }, - }); - }, -}); diff --git a/test/suites/dev/moonbase/test-assets/test-destroy-foreign-asset.ts b/test/suites/dev/moonbase/test-assets/test-destroy-foreign-asset.ts deleted file mode 100644 index d1ca7d51a5..0000000000 --- a/test/suites/dev/moonbase/test-assets/test-destroy-foreign-asset.ts +++ /dev/null @@ -1,75 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { - RELAY_SOURCE_LOCATION, - expectOk, - registerForeignAsset, - relayAssetMetadata, - verifyLatestBlockFees, -} from "../../../../helpers"; - -const palletId = "0x6D6f646c617373746d6E67720000000000000000"; - -describeSuite({ - id: "D010107", - title: "XCM - asset manager - destroy foreign asset", - foundationMethods: "dev", - testCases: ({ context, it, log }) => { - let assetId: string; - let api: ApiPromise; - beforeAll(async function () { - api = context.polkadotJs(); - // registerForeignAsset - const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( - context, - RELAY_SOURCE_LOCATION, - relayAssetMetadata as any, - 1 - ); - assetId = registeredAssetId; - expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[5].event.method.toString()).to.eq("ExtrinsicSuccess"); - expect(registeredAsset.owner.toString()).to.eq(palletId); - - await verifyLatestBlockFees(context); - }); - - it({ - id: "T01", - title: "should be able to destroy a foreign asset through pallet-asset-manager", - test: async function () { - // Destroy foreign asset - await expectOk( - context.createBlock( - api.tx.sudo.sudo((api.tx.assetManager as any).destroyForeignAsset(assetId, 1)) - ) - ); - - await expectOk(context.createBlock(api.tx.assets.destroyAccounts(assetId))); - await expectOk(context.createBlock(api.tx.assets.destroyApprovals(assetId))); - await expectOk(context.createBlock(api.tx.assets.finishDestroy(assetId))); - - // assetId - const id = await api.query.assetManager.assetTypeId(RELAY_SOURCE_LOCATION); - - // asset units per second removed - const assetUnitsPerSecond = await api.query.assetManager.assetTypeUnitsPerSecond( - RELAY_SOURCE_LOCATION - ); - - // Supported assets should be 0 - const supportedAssets = await api.query.assetManager.supportedFeePaymentAssets(); - - // assetDetails should have dissapeared - const assetDetails = await api.query.assets.asset(assetId); - - expect(assetUnitsPerSecond.isNone).to.eq(true); - expect(id.isNone).to.eq(true); - expect(assetDetails.isNone).to.eq(true); - // the asset should not be supported - expect(supportedAssets.length).to.eq(0); - }, - }); - }, -}); diff --git a/test/suites/dev/moonbase/test-assets/test-foreign-asset.ts b/test/suites/dev/moonbase/test-assets/test-foreign-asset.ts deleted file mode 100644 index 6df566489f..0000000000 --- a/test/suites/dev/moonbase/test-assets/test-foreign-asset.ts +++ /dev/null @@ -1,34 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { describeSuite, expect } from "@moonwall/cli"; -import { - RELAY_SOURCE_LOCATION2, - relayAssetMetadata, - registerForeignAsset, - verifyLatestBlockFees, -} from "../../../../helpers"; - -const palletId = "0x6D6f646c617373746d6E67720000000000000000"; - -describeSuite({ - id: "D010108", - title: "XCM - asset manager - foreign asset", - foundationMethods: "dev", - testCases: ({ context, it, log }) => { - it({ - id: "T01", - title: "should be registerable and have unit per seconds set", - test: async function () { - const { events, registeredAsset } = await registerForeignAsset( - context, - RELAY_SOURCE_LOCATION2, - relayAssetMetadata as any - ); - - expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[5].event.method.toString()).to.eq("ExtrinsicSuccess"); - expect(registeredAsset.owner.toString()).to.eq(palletId); - await verifyLatestBlockFees(context); - }, - }); - }, -}); diff --git a/test/suites/dev/moonbase/test-assets/test-foreign-assets-balances.ts b/test/suites/dev/moonbase/test-assets/test-foreign-assets-balances.ts new file mode 100644 index 0000000000..57bfdbedfd --- /dev/null +++ b/test/suites/dev/moonbase/test-assets/test-foreign-assets-balances.ts @@ -0,0 +1,32 @@ +import "@moonbeam-network/api-augment"; +import "@moonbeam-network/api-augment/moonbase"; +import { describeSuite, expect } from "@moonwall/cli"; +import { ALITH_ADDRESS, alith } from "@moonwall/util"; +import { + ARBITRARY_ASSET_ID, + RELAY_SOURCE_LOCATION_V4, + foreignAssetBalance, + mockAssetBalance, +} from "../../../../helpers"; + +describeSuite({ + id: "D010109", + title: "XCM - Create new foreign asset", + foundationMethods: "dev", + testCases: ({ context, it, log }) => { + it({ + id: "T01", + title: "should check balances consstency", + test: async function () { + const someBalance = 100_000_000_000_000n; + const assetLocation = RELAY_SOURCE_LOCATION_V4; + const assetId = ARBITRARY_ASSET_ID; + + await mockAssetBalance(context, someBalance, assetId, assetLocation, alith, ALITH_ADDRESS); + + const newBalance = await foreignAssetBalance(context, assetId, ALITH_ADDRESS); + expect(newBalance).toBe(someBalance); + }, + }); + }, +}); diff --git a/test/suites/dev/moonbase/test-assets/test-foreign-assets-change-xcm-location.ts b/test/suites/dev/moonbase/test-assets/test-foreign-assets-change-xcm-location.ts new file mode 100644 index 0000000000..6280d60b7f --- /dev/null +++ b/test/suites/dev/moonbase/test-assets/test-foreign-assets-change-xcm-location.ts @@ -0,0 +1,56 @@ +import "@moonbeam-network/api-augment"; +import { beforeAll, describeSuite, expect } from "@moonwall/cli"; +import { ApiPromise } from "@polkadot/api"; +import { + PARA_1000_SOURCE_LOCATION_V4, + RELAY_SOURCE_LOCATION_V4, + registerForeignAsset, + relayAssetMetadata, + verifyLatestBlockFees, +} from "../../../../helpers"; + +describeSuite({ + id: "D010106", + title: "XCM - Change existing asset's XCM location", + foundationMethods: "dev", + testCases: ({ context, log, it }) => { + let assetId: bigint; + let api: ApiPromise; + beforeAll(async function () { + api = context.polkadotJs(); + const { registeredAssetId } = await registerForeignAsset( + context, + BigInt(1), + RELAY_SOURCE_LOCATION_V4, + relayAssetMetadata as any + ); + assetId = registeredAssetId; + + await verifyLatestBlockFees(context); + }); + + it({ + id: "T01", + title: "should change the asset location", + test: async function () { + const { result } = await context.createBlock( + api.tx.sudo.sudo( + api.tx.evmForeignAssets.changeXcmLocation(assetId, PARA_1000_SOURCE_LOCATION_V4) + ) + ); + + const locationChangeEvent = (result as any).events.find( + ({ event: { method } }) => method.toString() === "ForeignAssetXcmLocationChanged" + ).event; + + const newLocation = locationChangeEvent.data[1]; + const id = locationChangeEvent.data[0]; + + expect(JSON.stringify(newLocation).toLowerCase()).to.eq( + JSON.stringify(PARA_1000_SOURCE_LOCATION_V4).toLowerCase() + ); + expect(BigInt(id)).to.eq(BigInt(assetId)); + }, + }); + }, +}); diff --git a/test/suites/dev/moonbase/test-assets/test-foreign-assets-create.ts b/test/suites/dev/moonbase/test-assets/test-foreign-assets-create.ts new file mode 100644 index 0000000000..05b9ab2939 --- /dev/null +++ b/test/suites/dev/moonbase/test-assets/test-foreign-assets-create.ts @@ -0,0 +1,71 @@ +import "@moonbeam-network/api-augment"; +import "@moonbeam-network/api-augment/moonbase"; +import { describeSuite, expect, beforeAll } from "@moonwall/cli"; +import { + ARBITRARY_ASSET_ID, + RELAY_SOURCE_LOCATION_V4, + registerForeignAsset, + relayAssetMetadata, +} from "../../../../helpers"; +import { parseAbi } from "viem"; + +describeSuite({ + id: "D010108", + title: "XCM - Create new foreign asset", + foundationMethods: "dev", + testCases: ({ context, it, log }) => { + let address: string; + let assetId: bigint; + + beforeAll(async () => { + const { registeredAssetId, contractAddress, registeredAssetLocation } = + await registerForeignAsset( + context, + ARBITRARY_ASSET_ID, + RELAY_SOURCE_LOCATION_V4, + relayAssetMetadata as any + ); + + address = contractAddress; + assetId = registeredAssetId; + expect(contractAddress).toBeDefined(); + expect(registeredAssetId).eq(ARBITRARY_ASSET_ID.toString()); + expect(registeredAssetLocation.toString()).to.eq( + JSON.stringify(RELAY_SOURCE_LOCATION_V4).toLowerCase() + ); + }); + + it({ + id: "T01", + title: "should deploy the asset's contract", + test: async function () { + expect( + await context.viem().readContract({ + address: address as `0x${string}`, + functionName: "name", + args: [], + abi: parseAbi(["function name() view returns (string)"]), + }) + ).toBe("DOT"); + + expect( + await context.viem().readContract({ + address: address as `0x${string}`, + functionName: "symbol", + args: [], + abi: parseAbi(["function symbol() view returns (string)"]), + }) + ).toBe("DOT"); + + expect( + await context.viem().readContract({ + address: address as `0x${string}`, + functionName: "decimals", + args: [], + abi: parseAbi(["function decimals() view returns (uint8)"]), + }) + ).toBe(12); + }, + }); + }, +}); diff --git a/test/suites/dev/moonbase/test-assets/test-remove-asset.ts b/test/suites/dev/moonbase/test-assets/test-remove-asset.ts deleted file mode 100644 index 574f7271da..0000000000 --- a/test/suites/dev/moonbase/test-assets/test-remove-asset.ts +++ /dev/null @@ -1,66 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { bnToHex } from "@polkadot/util"; - -import { ApiPromise } from "@polkadot/api"; - -const palletId = "0x6D6f646c617373746d6E67720000000000000000"; - -describeSuite({ - id: "D010109", - title: "XCM - asset manager - Remove asset from supported", - foundationMethods: "dev", - testCases: ({ context, log, it }) => { - let assetId: string; - let api: ApiPromise; - - beforeAll(async function () { - api = context.polkadotJs(); - const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( - context, - RELAY_SOURCE_LOCATION, - relayAssetMetadata as any, - 1 - ); - assetId = registeredAssetId; - expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[5].event.method.toString()).to.eq("ExtrinsicSuccess"); - expect(registeredAsset.owner.toString()).to.eq(palletId); - - await verifyLatestBlockFees(context); - }); - - it({ - id: "T01", - title: "should remove an asset from our supported fee payments", - test: async function () { - // ChangeAssetType - await context.createBlock( - api.tx.sudo.sudo(api.tx.assetManager.removeSupportedAsset(RELAY_SOURCE_LOCATION, 1)) - ); - - // assetId - const id = (await api.query.assetManager.assetTypeId(RELAY_SOURCE_LOCATION)).unwrap(); - - // asset units per second removed - const assetUnitsPerSecond = await api.query.assetManager.assetTypeUnitsPerSecond( - RELAY_SOURCE_LOCATION - ); - - // Supported assets should be 0 - const supportedAssets = await api.query.assetManager.supportedFeePaymentAssets(); - - expect(assetUnitsPerSecond.isNone).to.eq(true); - expect(bnToHex(id)).to.eq(assetId); - // the asset should not be supported - expect(supportedAssets.length).to.eq(0); - }, - }); - }, -}); -import { - RELAY_SOURCE_LOCATION, - relayAssetMetadata, - registerForeignAsset, - verifyLatestBlockFees, -} from "../../../../helpers"; diff --git a/test/suites/dev/moonbase/test-maintenance/test-maintenance-filter.ts b/test/suites/dev/moonbase/test-maintenance/test-maintenance-filter.ts index 11a283c5dc..0d8bf793f5 100644 --- a/test/suites/dev/moonbase/test-maintenance/test-maintenance-filter.ts +++ b/test/suites/dev/moonbase/test-maintenance/test-maintenance-filter.ts @@ -12,7 +12,7 @@ import { import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { hexToU8a } from "@polkadot/util"; import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; const RELAYCHAIN_ARBITRARY_ADDRESS_1: string = @@ -128,7 +128,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-maintenance/test-maintenance-filter2.ts b/test/suites/dev/moonbase/test-maintenance/test-maintenance-filter2.ts index 40fad037f0..bd633b956c 100644 --- a/test/suites/dev/moonbase/test-maintenance/test-maintenance-filter2.ts +++ b/test/suites/dev/moonbase/test-maintenance/test-maintenance-filter2.ts @@ -9,7 +9,7 @@ import { import { ALITH_ADDRESS, alith, baltathar } from "@moonwall/util"; import { u128 } from "@polkadot/types-codec"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; -import { RELAY_SOURCE_LOCATION, mockAssetBalance } from "../../../../helpers"; +import { RELAY_SOURCE_LOCATION, mockOldAssetBalance } from "../../../../helpers"; const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; @@ -38,7 +38,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20-low-level.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20-low-level.ts index 46d924e250..a6e3b4c4af 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20-low-level.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20-low-level.ts @@ -17,7 +17,7 @@ import { u128 } from "@polkadot/types"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { nToHex } from "@polkadot/util"; import { Abi, encodeFunctionData } from "viem"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; describeSuite({ id: "D012802", @@ -52,7 +52,7 @@ describeSuite({ contractInstanceAddress = contractAddress; contractAbi = abi; - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, @@ -62,7 +62,7 @@ describeSuite({ true ); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20.ts index 08d0c4d380..285c8d54b6 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20.ts @@ -4,7 +4,7 @@ import { ALITH_ADDRESS, alith } from "@moonwall/util"; import { u128 } from "@polkadot/types-codec"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { Abi, decodeAbiParameters, encodeFunctionData } from "viem"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; describeSuite({ id: "D012803", @@ -36,7 +36,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20a.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20a.ts index 3f7c1b1649..ff647f9010 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20a.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20a.ts @@ -3,7 +3,7 @@ import { beforeAll, deployCreateCompiledContract, describeSuite, expect } from " import { ALITH_ADDRESS, BALTATHAR_ADDRESS, alith, createEthersTransaction } from "@moonwall/util"; import { u128 } from "@polkadot/types-codec"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; import { Abi, encodeFunctionData } from "viem"; @@ -44,7 +44,7 @@ describeSuite({ }); assetId = context.polkadotJs().createType("u128", ASSET_ID); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20b.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20b.ts index 324d1116bb..01486a76f9 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20b.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20b.ts @@ -11,7 +11,7 @@ import { } from "@moonwall/util"; import { u128 } from "@polkadot/types-codec"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; import { Abi, encodeFunctionData } from "viem"; @@ -52,7 +52,7 @@ describeSuite({ }); assetId = context.polkadotJs().createType("u128", ASSET_ID); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20c.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20c.ts index b99565d82c..f53f0c4d19 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20c.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20c.ts @@ -4,7 +4,7 @@ import { ALITH_ADDRESS, BALTATHAR_ADDRESS, alith, createViemTransaction } from " import { u128 } from "@polkadot/types-codec"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { Abi, encodeFunctionData } from "viem"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; describeSuite({ id: "D012806", @@ -33,7 +33,7 @@ describeSuite({ }); assetId = context.polkadotJs().createType("u128", ASSET_ID); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20d.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20d.ts index 847dfbbdd1..60eaffb2cd 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20d.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20d.ts @@ -10,7 +10,7 @@ import { import { u128 } from "@polkadot/types-codec"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { Abi, encodeFunctionData } from "viem"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; describeSuite({ id: "D012807", @@ -54,7 +54,7 @@ describeSuite({ erc20Abi = abi; erc20InstanceAddress = contractAddress; // We fund the contract address with this test - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20e.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20e.ts index 015b25784d..1922aac4c1 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20e.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20e.ts @@ -10,7 +10,7 @@ import { import { u128 } from "@polkadot/types-codec"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { Abi, encodeFunctionData } from "viem"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; describeSuite({ id: "D012808", @@ -55,7 +55,7 @@ describeSuite({ erc20Abi = abi; // We fund Alith with this test - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20f.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20f.ts index 68afc5273c..3b35f8e576 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20f.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-assets-erc20f.ts @@ -4,7 +4,7 @@ import { BALTATHAR_ADDRESS, alith, createViemTransaction } from "@moonwall/util" import { u128 } from "@polkadot/types-codec"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { Abi, encodeFunctionData } from "viem"; -import { mockAssetBalance } from "../../../../helpers"; +import { mockOldAssetBalance } from "../../../../helpers"; describeSuite({ id: "D012809", @@ -37,7 +37,7 @@ describeSuite({ erc20Abi = abi; erc20InstanceAddress = contractAddress; - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-pallet-xcm.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-pallet-xcm.ts index c20a44268d..a25642d9dc 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-pallet-xcm.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-pallet-xcm.ts @@ -4,7 +4,7 @@ import { ALITH_ADDRESS, BALTATHAR_ADDRESS, alith, createEthersTransaction } from import { u128 } from "@polkadot/types-codec"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { encodeFunctionData } from "viem"; -import { expectEVMResult, mockAssetBalance } from "../../../../helpers"; +import { expectEVMResult, mockOldAssetBalance } from "../../../../helpers"; const PRECOMPILE_PALLET_XCM_ADDRESS: `0x${string}` = "0x000000000000000000000000000000000000081A"; @@ -34,7 +34,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor.ts index 5a22365db6..fd8b6f1baf 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor.ts @@ -4,7 +4,7 @@ import { ALITH_ADDRESS, alith } from "@moonwall/util"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { fromBytes } from "viem"; import { - mockAssetBalance, + mockOldAssetBalance, verifyLatestBlockFees, registerXcmTransactorAndContract, } from "../../../../helpers"; @@ -103,7 +103,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor10.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor10.ts index 6a476192de..adc05655de 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor10.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor10.ts @@ -7,7 +7,7 @@ import { expectEVMResult, RELAY_SOURCE_LOCATION, relayAssetMetadata, - registerForeignAsset, + registerOldForeignAsset, registerXcmTransactorAndContract, PRECOMPILE_XCM_TRANSACTOR_V3_ADDRESS, } from "../../../../helpers"; @@ -20,7 +20,7 @@ describeSuite({ foundationMethods: "dev", testCases: ({ context, it, log }) => { beforeAll(async () => { - await registerForeignAsset(context, RELAY_SOURCE_LOCATION, relayAssetMetadata as any); + await registerOldForeignAsset(context, RELAY_SOURCE_LOCATION, relayAssetMetadata as any); await registerXcmTransactorAndContract(context); }); diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor11.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor11.ts index 85b8b6a3d1..08e25c45dc 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor11.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor11.ts @@ -4,7 +4,7 @@ import { ALITH_ADDRESS, ALITH_PRIVATE_KEY, alith } from "@moonwall/util"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { fromBytes } from "viem"; import { - mockAssetBalance, + mockOldAssetBalance, verifyLatestBlockFees, expectEVMResult, registerXcmTransactorDerivativeIndex, @@ -50,7 +50,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor12.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor12.ts index ccb09a8b3c..f3806d60e0 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor12.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor12.ts @@ -4,7 +4,7 @@ import { ALITH_ADDRESS, alith, ALITH_PRIVATE_KEY } from "@moonwall/util"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { fromBytes } from "viem"; import { - mockAssetBalance, + mockOldAssetBalance, verifyLatestBlockFees, expectEVMResult, registerXcmTransactorDerivativeIndex, @@ -52,7 +52,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor2.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor2.ts index d2169a1238..ec081ea74a 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor2.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor2.ts @@ -4,7 +4,7 @@ import { ALITH_ADDRESS, alith } from "@moonwall/util"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { fromBytes } from "viem"; import { - mockAssetBalance, + mockOldAssetBalance, verifyLatestBlockFees, expectEVMResult, registerXcmTransactorAndContract, @@ -44,7 +44,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor3.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor3.ts index d8b78db6b2..267824090c 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor3.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor3.ts @@ -6,8 +6,8 @@ import { relayAssetMetadata, verifyLatestBlockFees, expectEVMResult, - registerForeignAsset, registerXcmTransactorAndContract, + registerOldForeignAsset, } from "../../../../helpers"; const ADDRESS_RELAY_ASSETS = "0xffffffff1fcacbd218edc0eba20fc2308c778080"; @@ -18,7 +18,7 @@ describeSuite({ foundationMethods: "dev", testCases: ({ context, it }) => { beforeAll(async () => { - await registerForeignAsset(context, RELAY_SOURCE_LOCATION, relayAssetMetadata as any); + await registerOldForeignAsset(context, RELAY_SOURCE_LOCATION, relayAssetMetadata as any); await registerXcmTransactorAndContract(context); }); diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor6.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor6.ts index 453e880373..9a63627389 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor6.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor6.ts @@ -6,7 +6,7 @@ import { relayAssetMetadata, verifyLatestBlockFees, expectEVMResult, - registerForeignAsset, + registerOldForeignAsset, registerXcmTransactorAndContract, } from "../../../../helpers"; @@ -18,7 +18,7 @@ describeSuite({ foundationMethods: "dev", testCases: ({ context, it, log }) => { beforeAll(async () => { - await registerForeignAsset(context, RELAY_SOURCE_LOCATION, relayAssetMetadata as any); + await registerOldForeignAsset(context, RELAY_SOURCE_LOCATION, relayAssetMetadata as any); await registerXcmTransactorAndContract(context); }); diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor7.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor7.ts index 6865c069cb..99f138a814 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor7.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor7.ts @@ -4,7 +4,7 @@ import { ALITH_ADDRESS, alith } from "@moonwall/util"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { fromBytes } from "viem"; import { - mockAssetBalance, + mockOldAssetBalance, verifyLatestBlockFees, expectEVMResult, registerXcmTransactorDerivativeIndex, @@ -48,7 +48,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor8.ts b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor8.ts index 7b87fc600d..bd9f6dc11a 100644 --- a/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor8.ts +++ b/test/suites/dev/moonbase/test-precompile/test-precompile-xcm-transactor8.ts @@ -4,7 +4,7 @@ import { ALITH_ADDRESS, alith } from "@moonwall/util"; import { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; import { fromBytes } from "viem"; import { - mockAssetBalance, + mockOldAssetBalance, verifyLatestBlockFees, expectEVMResult, registerXcmTransactorDerivativeIndex, @@ -51,7 +51,7 @@ describeSuite({ supply: balance, }); - await mockAssetBalance( + await mockOldAssetBalance( context, assetBalance, assetDetails, diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-asset-transfer.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-asset-transfer.ts index b19c518d77..dd935755c4 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-asset-transfer.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-asset-transfer.ts @@ -3,7 +3,7 @@ import { beforeAll, customDevRpcRequest, describeSuite, expect } from "@moonwall import { alith } from "@moonwall/util"; import { RELAY_SOURCE_LOCATION, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -20,8 +20,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-1.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-1.ts index 6a0073269b..f25702e13a 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-1.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-1.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-2.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-2.ts index 69a5cb7fa8..431f70da2b 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-2.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-2.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-3.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-3.ts index 6560f9d506..8fe81b516d 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-3.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-3.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-4.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-4.ts index dc541b6390..0976776440 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-4.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-4.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-5.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-5.ts index add22b03e0..508a49fa70 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-5.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-5.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-6.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-6.ts index fcc3c0e570..599ed58484 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-6.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-dmp-error-and-appendix-6.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-1.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-1.ts index 7ac66223e6..c34723f6c1 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-1.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-1.ts @@ -1,7 +1,7 @@ import "@moonbeam-network/api-augment"; import { beforeAll, customDevRpcRequest, describeSuite, expect } from "@moonwall/cli"; import { alith } from "@moonwall/util"; -import { PARA_2000_SOURCE_LOCATION, registerForeignAsset } from "../../../../helpers"; +import { PARA_2000_SOURCE_LOCATION, registerOldForeignAsset } from "../../../../helpers"; const FOREIGN_TOKEN = 1_000_000_000_000n; @@ -23,8 +23,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, PARA_2000_SOURCE_LOCATION, assetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-2.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-2.ts index 97c05976b0..1cecd5eca4 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-2.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-2.ts @@ -3,12 +3,8 @@ import { beforeAll, describeSuite, expect } from "@moonwall/cli"; import { BN } from "@polkadot/util"; import { alith } from "@moonwall/util"; -import { - registerForeignAsset, - XcmFragment, - RawXcmMessage, - injectHrmpMessageAndSeal, -} from "../../../../helpers/xcm.js"; +import { XcmFragment, RawXcmMessage, injectHrmpMessageAndSeal } from "../../../../helpers/xcm.js"; +import { registerOldForeignAsset } from "../../../../helpers/assets.js"; const palletId = "0x6D6f646c617373746d6E67720000000000000000"; const statemint_para_id = 1001; @@ -41,8 +37,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, STATEMINT_LOCATION, assetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-3.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-3.ts index e83956a551..01f8c8bebf 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-3.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-3.ts @@ -2,12 +2,8 @@ import "@moonbeam-network/api-augment"; import { beforeAll, describeSuite, expect } from "@moonwall/cli"; import { alith } from "@moonwall/util"; -import { - registerForeignAsset, - XcmFragment, - RawXcmMessage, - injectHrmpMessageAndSeal, -} from "../../../../helpers/xcm.js"; +import { XcmFragment, RawXcmMessage, injectHrmpMessageAndSeal } from "../../../../helpers/xcm.js"; +import { registerOldForeignAsset } from "../../../../helpers/assets.js"; const FOREIGN_TOKEN = 1_000_000_000_000n; @@ -42,8 +38,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, STATEMINT_LOCATION, assetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-6.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-6.ts index 9545f22386..3ca5568b4e 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-6.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-6.ts @@ -3,12 +3,8 @@ import { beforeAll, describeSuite, expect } from "@moonwall/cli"; import { alith } from "@moonwall/util"; -import { - registerForeignAsset, - XcmFragment, - RawXcmMessage, - injectHrmpMessageAndSeal, -} from "../../../../helpers/xcm.js"; +import { XcmFragment, RawXcmMessage, injectHrmpMessageAndSeal } from "../../../../helpers/xcm.js"; +import { registerOldForeignAsset } from "../../../../helpers/assets.js"; const FOREIGN_TOKEN = 1_000_000_000_000n; @@ -56,13 +52,13 @@ describeSuite({ let assetIdOne: string; beforeAll(async () => { - // registerForeignAsset 0 + // registerOldForeignAsset 0 const { registeredAssetId: registeredAssetIdZero, registeredAsset: registeredAssetZero } = - await registerForeignAsset(context, STATEMINT_LOCATION, assetMetadata); + await registerOldForeignAsset(context, STATEMINT_LOCATION, assetMetadata); assetIdZero = registeredAssetIdZero; - // registerForeignAsset 1 + // registerOldForeignAsset 1 const { registeredAssetId: registeredAssetIdOne, registeredAsset: registeredAssetOne } = - await registerForeignAsset(context, STATEMINT_ASSET_ONE_LOCATION, assetMetadata, 0, 1); + await registerOldForeignAsset(context, STATEMINT_ASSET_ONE_LOCATION, assetMetadata, 0, 1); assetIdOne = registeredAssetIdOne; expect(registeredAssetZero.owner.toHex()).to.eq(palletId.toLowerCase()); diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-8.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-8.ts index 2ac2355a7f..dff1c29645 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-8.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-asset-transfer-8.ts @@ -2,12 +2,8 @@ import "@moonbeam-network/api-augment"; import { beforeAll, describeSuite, expect } from "@moonwall/cli"; import { alith } from "@moonwall/util"; -import { - registerForeignAsset, - XcmFragment, - RawXcmMessage, - injectHrmpMessageAndSeal, -} from "../../../../helpers/xcm.js"; +import { XcmFragment, RawXcmMessage, injectHrmpMessageAndSeal } from "../../../../helpers/xcm.js"; +import { registerOldForeignAsset } from "../../../../helpers/assets.js"; const palletId = "0x6D6f646c617373746d6E67720000000000000000"; const statemint_para_id = 1001; @@ -40,8 +36,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, STATEMINT_LOCATION, assetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-transact-ethereum-3.ts b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-transact-ethereum-3.ts index e73671a4c3..c9a034ed50 100644 --- a/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-transact-ethereum-3.ts +++ b/test/suites/dev/moonbase/test-xcm-v3/test-mock-hrmp-transact-ethereum-3.ts @@ -11,9 +11,9 @@ import { injectHrmpMessageAndSeal, descendOriginFromAddress20, MultiLocation, - registerForeignAsset, weightMessage, } from "../../../../helpers/xcm.js"; +import { registerOldForeignAsset } from "../../../../helpers/assets.js"; describeSuite({ id: "D014025", @@ -66,8 +66,8 @@ describeSuite({ descendedAddress = descendOriginAddress; random = generateKeyringPair(); - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, STATEMINT_LOCATION, assetMetadata, diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-1.ts b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-1.ts index e4ef776a7b..9bfa872c7d 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-1.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-1.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-2.ts b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-2.ts index 3949365ab1..49dfaa9c1b 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-2.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-2.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-3.ts b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-3.ts index ab9892f04d..9a20c56bae 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-3.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-3.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-4.ts b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-4.ts index 7a360425bf..3e2d85e715 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-4.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-4.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-5.ts b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-5.ts index 39c7f1db20..b4226c91d1 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-5.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-5.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-6.ts b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-6.ts index 54e7d80c29..a51072047e 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-6.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-mock-dmp-error-and-appendix-6.ts @@ -5,7 +5,7 @@ import type { XcmVersionedXcm } from "@polkadot/types/lookup"; import { RELAY_SOURCE_LOCATION, XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, } from "../../../../helpers"; @@ -22,8 +22,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-1.ts b/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-1.ts index 0cd2c6e9de..e0ecd5541f 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-1.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-1.ts @@ -3,12 +3,8 @@ import { beforeAll, describeSuite, expect } from "@moonwall/cli"; import { BN } from "@polkadot/util"; import { alith } from "@moonwall/util"; -import { - registerForeignAsset, - XcmFragment, - RawXcmMessage, - injectHrmpMessageAndSeal, -} from "../../../../helpers/xcm.js"; +import { XcmFragment, RawXcmMessage, injectHrmpMessageAndSeal } from "../../../../helpers/xcm.js"; +import { registerOldForeignAsset } from "../../../../helpers/assets.js"; const palletId = "0x6D6f646c617373746d6E67720000000000000000"; const statemint_para_id = 1001; @@ -41,8 +37,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, STATEMINT_LOCATION, assetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-2.ts b/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-2.ts index a8fd4aed4b..baa872080c 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-2.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-2.ts @@ -2,12 +2,8 @@ import "@moonbeam-network/api-augment"; import { beforeAll, describeSuite, expect } from "@moonwall/cli"; import { alith } from "@moonwall/util"; -import { - registerForeignAsset, - XcmFragment, - RawXcmMessage, - injectHrmpMessageAndSeal, -} from "../../../../helpers/xcm.js"; +import { XcmFragment, RawXcmMessage, injectHrmpMessageAndSeal } from "../../../../helpers/xcm.js"; +import { registerOldForeignAsset } from "../../../../helpers/assets.js"; const FOREIGN_TOKEN = 1_000_000_000_000n; @@ -42,8 +38,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, STATEMINT_LOCATION, assetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-5.ts b/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-5.ts index ee27937b07..932210d05c 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-5.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-5.ts @@ -3,12 +3,8 @@ import { beforeAll, describeSuite, expect } from "@moonwall/cli"; import { alith } from "@moonwall/util"; -import { - registerForeignAsset, - XcmFragment, - RawXcmMessage, - injectHrmpMessageAndSeal, -} from "../../../../helpers/xcm.js"; +import { XcmFragment, RawXcmMessage, injectHrmpMessageAndSeal } from "../../../../helpers/xcm.js"; +import { registerOldForeignAsset } from "../../../../helpers/assets.js"; const FOREIGN_TOKEN = 1_000_000_000_000n; @@ -56,13 +52,13 @@ describeSuite({ let assetIdOne: string; beforeAll(async () => { - // registerForeignAsset 0 + // registerOldForeignAsset 0 const { registeredAssetId: registeredAssetIdZero, registeredAsset: registeredAssetZero } = - await registerForeignAsset(context, STATEMINT_LOCATION, assetMetadata); + await registerOldForeignAsset(context, STATEMINT_LOCATION, assetMetadata); assetIdZero = registeredAssetIdZero; - // registerForeignAsset 1 + // registerOldForeignAsset 1 const { registeredAssetId: registeredAssetIdOne, registeredAsset: registeredAssetOne } = - await registerForeignAsset(context, STATEMINT_ASSET_ONE_LOCATION, assetMetadata, 0, 1); + await registerOldForeignAsset(context, STATEMINT_ASSET_ONE_LOCATION, assetMetadata, 0, 1); assetIdOne = registeredAssetIdOne; expect(registeredAssetZero.owner.toHex()).to.eq(palletId.toLowerCase()); diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-6.ts b/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-6.ts index 455df2c6dc..d890717115 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-6.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-mock-hrmp-asset-transfer-6.ts @@ -2,12 +2,8 @@ import "@moonbeam-network/api-augment"; import { beforeAll, describeSuite, expect } from "@moonwall/cli"; import { alith } from "@moonwall/util"; -import { - registerForeignAsset, - XcmFragment, - RawXcmMessage, - injectHrmpMessageAndSeal, -} from "../../../../helpers/xcm.js"; +import { XcmFragment, RawXcmMessage, injectHrmpMessageAndSeal } from "../../../../helpers/xcm.js"; +import { registerOldForeignAsset } from "../../../../helpers/assets.js"; const palletId = "0x6D6f646c617373746d6E67720000000000000000"; const statemint_para_id = 1001; @@ -40,8 +36,8 @@ describeSuite({ let assetId: string; beforeAll(async () => { - // registerForeignAsset - const { registeredAssetId, registeredAsset } = await registerForeignAsset( + // registerOldForeignAsset + const { registeredAssetId, registeredAsset } = await registerOldForeignAsset( context, STATEMINT_LOCATION, assetMetadata diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-xcm-evm-with-dot.ts b/test/suites/dev/moonbase/test-xcm-v4/test-xcm-evm-with-dot.ts index ac5cd4a7be..19f3a5c10c 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-xcm-evm-with-dot.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-xcm-evm-with-dot.ts @@ -9,7 +9,8 @@ import { hexToBigInt } from "@polkadot/util"; import { Abi, encodeFunctionData } from "viem"; import { RELAY_SOURCE_LOCATION, - mockAssetBalance, + mockOldAssetBalance, + registerOldForeignAsset, relayAssetMetadata, verifyLatestBlockFees, } from "../../../../helpers/index.js"; @@ -19,7 +20,6 @@ import { XcmFragmentConfig, descendOriginFromAddress20, injectHrmpMessageAndSeal, - registerForeignAsset, } from "../../../../helpers/xcm.js"; describeSuite({ @@ -40,7 +40,7 @@ describeSuite({ api = context.polkadotJs(); // Register DOT as foreign asset, obtaining xcDOTs - const { registeredAssetId } = await registerForeignAsset( + const { registeredAssetId } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata as any, @@ -64,7 +64,14 @@ describeSuite({ }); // Fund descend address with enough xcDOTs to pay XCM message and EVM execution fees - await mockAssetBalance(context, assetBalance, assetDetails, alith, assetId, descendAddress); + await mockOldAssetBalance( + context, + assetBalance, + assetDetails, + alith, + assetId, + descendAddress + ); // Deploy example contract to be called through XCM const { contractAddress, abi } = await context.deployContract!("Incrementor"); diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-xcm-payment-api-transact-foreign.ts b/test/suites/dev/moonbase/test-xcm-v4/test-xcm-payment-api-transact-foreign.ts index ad57f12f91..68cbdbc898 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-xcm-payment-api-transact-foreign.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-xcm-payment-api-transact-foreign.ts @@ -13,8 +13,8 @@ import { descendOriginFromAddress20, relayAssetMetadata, RELAY_SOURCE_LOCATION, - registerForeignAsset, - mockAssetBalance, + registerOldForeignAsset, + mockOldAssetBalance, } from "../../../../helpers"; // TODO: remove once we upgrade @polkadot/api to v12.1.1 @@ -115,7 +115,7 @@ describeSuite({ ...runtimeApi, }); - const { registeredAssetId } = await registerForeignAsset( + const { registeredAssetId } = await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata as any, @@ -161,7 +161,14 @@ describeSuite({ ); // Fund descendAddress with enough xcDOTs to pay XCM execution fees - await mockAssetBalance(context, assetBalance, assetDetails, alith, assetId, descendAddress); + await mockOldAssetBalance( + context, + assetBalance, + assetDetails, + alith, + assetId, + descendAddress + ); // We need to fund the descendAddress with both amounts. // This account takes care of paying the foreign fees and also transfering the diff --git a/test/suites/dev/moonbase/test-xcm-v4/test-xcm-payment-api.ts b/test/suites/dev/moonbase/test-xcm-v4/test-xcm-payment-api.ts index 0ad1f176bb..01febe8a7d 100644 --- a/test/suites/dev/moonbase/test-xcm-v4/test-xcm-payment-api.ts +++ b/test/suites/dev/moonbase/test-xcm-v4/test-xcm-payment-api.ts @@ -2,7 +2,7 @@ import { beforeAll, describeSuite, expect } from "@moonwall/cli"; import { ApiPromise, WsProvider } from "@polkadot/api"; import { XcmFragment, - registerForeignAsset, + registerOldForeignAsset, relayAssetMetadata, RELAY_SOURCE_LOCATION, } from "../../../../helpers"; @@ -93,7 +93,7 @@ describeSuite({ ...runtimeApi, }); - await registerForeignAsset( + await registerOldForeignAsset( context, RELAY_SOURCE_LOCATION, relayAssetMetadata as any,