Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add XCM DryRun and LocationToAccount runtime APIs to all runtimes #2980

Merged
merged 68 commits into from
Oct 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
1b0a25e
point dependencies to moonbeam-polkadot-sdk-stable2407
gonzamontiel Aug 26, 2024
0fa229f
bump packages versions to match polkadot-sdk
gonzamontiel Aug 30, 2024
4382107
apply TransactionPov changes
gonzamontiel Aug 30, 2024
740cd83
update runtime configs (wip)
gonzamontiel Aug 30, 2024
f1d5a15
update imports
gonzamontiel Sep 2, 2024
acb3659
mute hrmp channel moonriver - Litmus (#2914)
librelois Aug 24, 2024
42a12fd
Add step to Build workflow to check for WASM runtime sizes (#2888)
pLabarta Aug 27, 2024
22541c9
add log event (#2918)
RomarQ Aug 28, 2024
375d009
Extract Storage Read costs for dev tests involved in #2786 (#2915)
pLabarta Aug 29, 2024
9f7daa1
Fix auto-pause xcm: incoming XCMP messages where dropped when auto-pa…
librelois Aug 30, 2024
631077f
Set the block size to 60mln gas for moonbeam (#2921)
noandrea Aug 30, 2024
d84c61f
Add pallet_parameters (moonbase only) (#2923)
TarekkMA Aug 30, 2024
e0e8267
make moonbeam compile
gonzamontiel Sep 2, 2024
d95ff88
remove cumulus_pallet_dmp_queue
gonzamontiel Sep 2, 2024
fd33a25
remove unused import
gonzamontiel Sep 2, 2024
6362bb7
add proper para_id to MockValidationDataInherentDataProvider
gonzamontiel Sep 3, 2024
800d803
update config for tests
gonzamontiel Sep 3, 2024
5ba6607
add MockTimestampInherentDataProvider to simulate consistent and sequ…
gonzamontiel Sep 4, 2024
b9a8235
Merge remote-tracking branch 'origin' into moonbeam-polkadot-stable2407
gonzamontiel Sep 5, 2024
7b069da
Merge remote-tracking branch 'origin/master' into moonbeam-polkadot-s…
gonzamontiel Sep 5, 2024
31637d3
Revert "apply TransactionPov changes"
gonzamontiel Sep 10, 2024
a008431
update cargo lock pins
gonzamontiel Sep 10, 2024
65eb283
remove import of deleted TransacionPoV
gonzamontiel Sep 10, 2024
a5a9048
Make cargo test compile
gonzamontiel Sep 12, 2024
4c00b9e
remove deprecated tresury pallet tests, add some for the new function…
gonzamontiel Sep 17, 2024
fd62226
Merge remote-tracking branch 'origin/master' into moonbeam-polkadot-s…
gonzamontiel Sep 18, 2024
95783df
fix tests
gonzamontiel Sep 18, 2024
705eca7
fix remaining dev tests
gonzamontiel Sep 19, 2024
1c08dca
fix licenses
gonzamontiel Sep 20, 2024
b326d63
fix lazy loading backend for stable
gonzamontiel Sep 20, 2024
7456ad7
remove unused patch
gonzamontiel Sep 20, 2024
15086d6
fix linters
gonzamontiel Sep 20, 2024
87acd36
fix cargo test with benchmarking and tracing enabled
gonzamontiel Sep 20, 2024
66bbfc8
fix lazy loading
gonzamontiel Sep 20, 2024
22e52d3
fix command for lazy loading
gonzamontiel Sep 20, 2024
90e42e3
update frontier pin
gonzamontiel Sep 20, 2024
b8fff6b
support new 'stableYYMM' versioning for polkadot
gonzamontiel Sep 23, 2024
174674a
Merge remote-tracking branch 'origin/master' into moonbeam-polkadot-s…
gonzamontiel Sep 23, 2024
10f3334
update polkadot sdk pin
gonzamontiel Sep 23, 2024
ed46225
fix download-polkadot script
gonzamontiel Sep 23, 2024
94d0daa
simplify script
gonzamontiel Sep 23, 2024
5307533
Replace thread_local with AtomicU64 (as per review request)
gonzamontiel Sep 23, 2024
e09df39
remove deprecated test code
gonzamontiel Sep 23, 2024
e473197
use latest version of nextest
RomarQ Sep 23, 2024
abd48b3
add DryRunApi and LocationToAccountApi
Agusrodri Sep 25, 2024
9cfc747
Merge remote-tracking branch 'origin/master' into moonbeam-polkadot-s…
gonzamontiel Sep 26, 2024
f19c9ef
Update precompiles/collective/src/mock.rs
gonzamontiel Sep 26, 2024
6daef57
apply review suggestions
gonzamontiel Sep 26, 2024
f7b044c
Revert "apply review suggestions"
gonzamontiel Sep 26, 2024
912650e
apply review suggestions
gonzamontiel Sep 26, 2024
97fe208
fix lazy-loading
RomarQ Sep 26, 2024
e12e8e5
re add reset_issuance
gonzamontiel Sep 26, 2024
e96f38f
add missing weights
gonzamontiel Sep 26, 2024
23bc9be
remove unused var
gonzamontiel Sep 26, 2024
b9cf00e
add TS tests
Agusrodri Sep 27, 2024
d3a91c0
cleanup
Agusrodri Sep 27, 2024
c5a9d96
fmt
Agusrodri Sep 27, 2024
88e14af
Merge branch 'moonbeam-polkadot-stable2407' into agustin-xcm-dry-run-api
RomarQ Sep 28, 2024
a233a0a
Merge branch 'master' into moonbeam-polkadot-stable2407
gonzamontiel Sep 30, 2024
76ac5d3
fix download correct binaries
gonzamontiel Oct 1, 2024
fa1324d
Merge remote-tracking branch 'origin/master' into moonbeam-polkadot-s…
gonzamontiel Oct 1, 2024
8111ba7
cargo fmt
gonzamontiel Oct 1, 2024
09eddbd
make polkadot worker binearies executable
gonzamontiel Oct 1, 2024
a0fb852
Merge branch 'moonbeam-polkadot-stable2407' into agustin-xcm-dry-run-api
RomarQ Oct 1, 2024
966083a
configure XcmRecorder for mocks
gonzamontiel Oct 1, 2024
eb1bbe5
Merge remote-tracking branch 'origin/master' into moonbeam-polkadot-s…
Agusrodri Oct 1, 2024
105fb2a
Merge branch 'moonbeam-polkadot-stable2407' into agustin-xcm-dry-run-api
gonzamontiel Oct 2, 2024
89bd68c
Merge branch 'master' into agustin-xcm-dry-run-api
Agusrodri Oct 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions runtime/common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ runtime-benchmarks = [
"pallet-xcm/runtime-benchmarks",
"pallet-moonbeam-lazy-migrations/runtime-benchmarks",
"moonbeam-xcm-benchmarks/runtime-benchmarks",
"xcm-runtime-apis/runtime-benchmarks",
]
try-runtime = [
"cumulus-pallet-parachain-system/try-runtime",
Expand Down
37 changes: 37 additions & 0 deletions runtime/common/src/apis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -765,6 +765,43 @@ macro_rules! impl_runtime_apis_plus_common {
}
}

impl xcm_runtime_apis::dry_run::DryRunApi<Block, RuntimeCall, RuntimeEvent, OriginCaller>
for Runtime {
fn dry_run_call(
origin: OriginCaller,
call: RuntimeCall
) -> Result<CallDryRunEffects<RuntimeEvent>, XcmDryRunApiError> {
PolkadotXcm::dry_run_call::<
Runtime,
xcm_config::XcmRouter,
OriginCaller,
RuntimeCall>(origin, call)
}

fn dry_run_xcm(
origin_location: VersionedLocation,
xcm: VersionedXcm<RuntimeCall>
) -> Result<XcmDryRunEffects<RuntimeEvent>, XcmDryRunApiError> {
PolkadotXcm::dry_run_xcm::<
Runtime,
xcm_config::XcmRouter,
RuntimeCall,
xcm_config::XcmExecutorConfig>(origin_location, xcm)
}
}

impl xcm_runtime_apis::conversions::LocationToAccountApi<Block, AccountId> for Runtime {
fn convert_location(location: VersionedLocation) -> Result<
AccountId,
xcm_runtime_apis::conversions::Error
> {
xcm_runtime_apis::conversions::LocationToAccountHelper::<
AccountId,
xcm_config::LocationToAccountId,
>::convert_location(location)
}
}

#[cfg(feature = "runtime-benchmarks")]
impl frame_benchmarking::Benchmark<Block> for Runtime {

Expand Down
1 change: 1 addition & 0 deletions runtime/moonbase/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@ runtime-benchmarks = [
"session-keys-primitives/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-runtime-apis/runtime-benchmarks",
]

try-runtime = [
Expand Down
5 changes: 4 additions & 1 deletion runtime/moonbase/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,10 @@ use sp_std::{
use sp_version::NativeVersion;
use sp_version::RuntimeVersion;
use xcm::{VersionedAssetId, VersionedAssets, VersionedLocation, VersionedXcm};
use xcm_runtime_apis::fees::Error as XcmPaymentApiError;
use xcm_runtime_apis::{
dry_run::{CallDryRunEffects, Error as XcmDryRunApiError, XcmDryRunEffects},
fees::Error as XcmPaymentApiError,
};

use smallvec::smallvec;
use sp_runtime::serde::{Deserialize, Serialize};
Expand Down
1 change: 1 addition & 0 deletions runtime/moonbeam/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,7 @@ runtime-benchmarks = [
"session-keys-primitives/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-runtime-apis/runtime-benchmarks",
]

try-runtime = [
Expand Down
5 changes: 4 additions & 1 deletion runtime/moonbeam/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,10 @@ use sp_runtime::{
};
use sp_std::{convert::TryFrom, prelude::*};
use xcm::{VersionedAssetId, VersionedAssets, VersionedLocation, VersionedXcm};
use xcm_runtime_apis::fees::Error as XcmPaymentApiError;
use xcm_runtime_apis::{
dry_run::{CallDryRunEffects, Error as XcmDryRunApiError, XcmDryRunEffects},
fees::Error as XcmPaymentApiError,
};

#[cfg(feature = "std")]
use sp_version::NativeVersion;
Expand Down
1 change: 1 addition & 0 deletions runtime/moonriver/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,7 @@ runtime-benchmarks = [
"session-keys-primitives/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-runtime-apis/runtime-benchmarks",
]
try-runtime = [
"cumulus-pallet-parachain-system/try-runtime",
Expand Down
5 changes: 4 additions & 1 deletion runtime/moonriver/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,10 @@ use sp_runtime::{
};
use sp_std::{convert::TryFrom, prelude::*};
use xcm::{VersionedAssetId, VersionedAssets, VersionedLocation, VersionedXcm};
use xcm_runtime_apis::fees::Error as XcmPaymentApiError;
use xcm_runtime_apis::{
dry_run::{CallDryRunEffects, Error as XcmDryRunApiError, XcmDryRunEffects},
fees::Error as XcmPaymentApiError,
};

use smallvec::smallvec;
#[cfg(feature = "std")]
Expand Down
209 changes: 209 additions & 0 deletions test/suites/dev/moonbase/test-xcm-v4/test-xcm-dry-run-api.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
import { beforeAll, describeSuite, expect } from "@moonwall/cli";
import { alith, generateKeyringPair } from "@moonwall/util";
import { ApiPromise, WsProvider } from "@polkadot/api";
import { u8aToHex } from "@polkadot/util";
import { XcmFragment } from "../../../../helpers";

// TODO: remove once the api is present in @polkadot/api
const runtimeApi = {
runtime: {
DryRunApi: [
{
methods: {
dry_run_call: {
description: "Dry run call",
params: [
{
name: "origin",
type: "OriginCaller",
},
{
name: "call",
type: "Call",
},
],
type: "Result<CallDryRunEffects<Event>, XcmDryRunError>",
},
dry_run_xcm: {
description: "Dry run XCM program",
params: [
{
name: "origin_location",
type: "XcmVersionedLocation",
},
{
name: "xcm",
type: "XcmVersionedXcm",
},
],
type: "Result<XcmDryRunEffects, XcmDryRunError>",
},
},
version: 1,
},
],
},
types: {
CallDryRunEffects: {
ExecutionResult: "DispatchResultWithPostInfo",
EmittedEvents: "Vec<Event>",
LocalXcm: "Option<XcmVersionedXcm>",
ForwardedXcms: "Vec<(XcmVersionedLocation, Vec<XcmVersionedXcm>)>",
},
DispatchErrorWithPostInfoTPostDispatchInfo: {
postInfo: "PostDispatchInfo",
error: "DispatchError",
},
DispatchResultWithPostInfo: {
_enum: {
Ok: "PostDispatchInfo",
Err: "DispatchErrorWithPostInfoTPostDispatchInfo",
},
},
PostDispatchInfo: {
actualWeight: "Option<Weight>",
paysFee: "Pays",
},
XcmDryRunEffects: {
ExecutionResult: "StagingXcmV4TraitsOutcome",
EmittedEvents: "Vec<Event>",
ForwardedXcms: "Vec<(XcmVersionedLocation, Vec<XcmVersionedXcm>)>",
},
XcmDryRunError: {
_enum: {
Unimplemented: "Null",
VersionedConversionFailed: "Null",
},
},
},
};

describeSuite({
id: "D014135",
title: "XCM - DryRunApi",
foundationMethods: "dev",
testCases: ({ context, it }) => {
let polkadotJs: ApiPromise;

beforeAll(async function () {
polkadotJs = await ApiPromise.create({
provider: new WsProvider(`ws://localhost:${process.env.MOONWALL_RPC_PORT}/`),
...runtimeApi,
});
});

it({
id: "T01",
title: "Should succeed calling DryRunApi::dryRunCall",
test: async function () {
const metadata = await context.polkadotJs().rpc.state.getMetadata();
const balancesPalletIndex = metadata.asLatest.pallets
.find(({ name }) => name.toString() == "Balances")!
.index.toNumber();

const randomReceiver = "0x1111111111111111111111111111111111111111111111111111111111111111";

// Beneficiary from destination's point of view
const destBeneficiary = {
V3: {
parents: 0,
interior: {
X1: {
AccountId32: {
network: null,
id: randomReceiver,
},
},
},
},
};

const assetsToSend = {
V3: [
{
id: {
Concrete: {
parents: 0,
interior: {
X1: { PalletInstance: Number(balancesPalletIndex) },
},
},
},
fun: {
Fungible: 1_000_000_000_000_000n,
},
},
],
};
const dest = {
V3: {
parents: 1,
interior: {
Here: null,
},
},
};
const polkadotXcmTx = polkadotJs.tx.polkadotXcm.transferAssets(
dest,
destBeneficiary,
assetsToSend,
0,
"Unlimited"
);

const dryRunCall = await polkadotJs.call.dryRunApi.dryRunCall(
{ system: { signed: alith.address } },
polkadotXcmTx
);

expect(dryRunCall.isOk).to.be.true;
expect(dryRunCall.asOk.ExecutionResult.isOk).be.true;
},
});

it({
id: "T02",
title: "Should succeed calling DryRunApi::dryRunXcm",
test: async function () {
const metadata = await context.polkadotJs().rpc.state.getMetadata();
const balancesPalletIndex = metadata.asLatest.pallets
.find(({ name }) => name.toString() == "Balances")!
.index.toNumber();
const randomKeyPair = generateKeyringPair();

// We will dry run a "ReserveAssetDeposited" coming from the relay
const xcmMessage = new XcmFragment({
assets: [
{
multilocation: {
parents: 0,
interior: {
X1: { PalletInstance: Number(balancesPalletIndex) },
},
},
fungible: 1_000_000_000_000_000n,
},
],
beneficiary: u8aToHex(randomKeyPair.addressRaw),
})
.reserve_asset_deposited()
.clear_origin()
.buy_execution()
.deposit_asset_v3()
.as_v3();

const dryRunXcm = await polkadotJs.call.dryRunApi.dryRunXcm(
{
V3: {
Concrete: { parent: 1, interior: { Here: null } },
},
},
xcmMessage
);

expect(dryRunXcm.isOk).to.be.true;
expect(dryRunXcm.asOk.ExecutionResult.isComplete).be.true;
},
});
},
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { describeSuite, expect } from "@moonwall/cli";
import { RELAY_V3_SOURCE_LOCATION } from "../../../../helpers/assets";

describeSuite({
id: "D014136",
title: "XCM - LocationToAccountApi",
foundationMethods: "dev",
testCases: ({ context, it }) => {
it({
id: "T01",
title: "Should succeed calling LocationToAccountApi::convertLocation",
test: async function () {
const convertLocation = await context
.polkadotJs()
.call.locationToAccountApi.convertLocation(RELAY_V3_SOURCE_LOCATION);

expect(convertLocation.isOk).to.be.true;
expect(convertLocation.asOk.toHuman()).to.eq("0x506172656E740000000000000000000000000000");
},
});
},
});
Loading