diff --git a/.github/workflows/notifications.json b/.github/workflows/notifications.json index f7f6e4640..a0292b998 100644 --- a/.github/workflows/notifications.json +++ b/.github/workflows/notifications.json @@ -16,5 +16,6 @@ "collectivesPolkadot": 192, "bridgeHubPolkadot": 207, "bridgeHubKusama": 208, - "unknown": 143 + "integritee": 285, + "unknown": 143, } diff --git a/packages/kusama/src/__snapshots__/integritee.assetHubKusama.test.ts.snap b/packages/kusama/src/__snapshots__/integritee.assetHubKusama.test.ts.snap new file mode 100644 index 000000000..0d5aec4f5 --- /dev/null +++ b/packages/kusama/src/__snapshots__/integritee.assetHubKusama.test.ts.snap @@ -0,0 +1,496 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`integriteeKusama & assetHubKusama > assetHubKusama transfer KSM to integriteeKusama > balance on from chain 1`] = ` +{ + "consumers": 0, + "data": { + "flags": "0x80000000000000000000000000000000", + "free": "(rounded 9000000000000)", + "frozen": 0, + "reserved": 0, + }, + "nonce": 1, + "providers": 1, + "sufficients": 0, +} +`; + +exports[`integriteeKusama & assetHubKusama > assetHubKusama transfer KSM to integriteeKusama > balance on to chain 1`] = ` +{ + "balance": "(rounded 1000000000000)", + "extra": null, + "reason": { + "sufficient": null, + }, + "status": "Liquid", +} +`; + +exports[`integriteeKusama & assetHubKusama > assetHubKusama transfer KSM to integriteeKusama > from chain hrmp messages 1`] = ` +[ + { + "data": [ + "ConcatenatedVersionedXcm", + { + "v4": [ + { + "reserveAssetDeposited": [ + { + "fun": { + "fungible": 1000000000000, + }, + "id": { + "interior": { + "here": null, + }, + "parents": 1, + }, + }, + ], + }, + { + "clearOrigin": null, + }, + { + "buyExecution": { + "fees": { + "fun": { + "fungible": 1000000000000, + }, + "id": { + "interior": { + "here": null, + }, + "parents": 1, + }, + }, + "weightLimit": { + "unlimited": null, + }, + }, + }, + { + "depositAsset": { + "assets": { + "wild": { + "allCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "x1": [ + { + "accountId32": { + "id": "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + { + "setTopic": "(redacted)", + }, + ], + }, + ], + "recipient": 2015, + }, +] +`; + +exports[`integriteeKusama & assetHubKusama > assetHubKusama transfer KSM to integriteeKusama > to chain xcm events 1`] = ` +[ + { + "data": { + "id": "(hash)", + "origin": { + "Sibling": 1000, + }, + "success": true, + "weightUsed": { + "proofSize": "(rounded 5100)", + "refTime": 5000000, + }, + }, + "method": "Processed", + "section": "messageQueue", + }, +] +`; + +exports[`integriteeKusama & assetHubKusama > assetHubKusama transfer KSM to integriteeKusama > tx events 1`] = ` +[ + { + "data": { + "outcome": { + "Complete": { + "used": { + "proofSize": "(rounded 6200)", + "refTime": "(rounded 300000000)", + }, + }, + }, + }, + "method": "Attempted", + "section": "polkadotXcm", + }, + { + "data": { + "fees": [ + { + "fun": { + "Fungible": "(rounded 1000000000)", + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + ], + "paying": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Kusama", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "FeesPaid", + "section": "polkadotXcm", + }, + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": "(rounded 2000)", + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "ReserveAssetDeposited": [ + { + "fun": { + "Fungible": 1000000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": { + "AllCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Kusama", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; + +exports[`integriteeKusama & assetHubKusama > integriteeKusama transfer KSM to assetHubKusama > balance on from chain 1`] = ` +{ + "balance": "(rounded 1000000000000000)", + "extra": null, + "reason": { + "consumer": null, + }, + "status": "Liquid", +} +`; + +exports[`integriteeKusama & assetHubKusama > integriteeKusama transfer KSM to assetHubKusama > balance on to chain 1`] = ` +{ + "consumers": 0, + "data": { + "flags": "0x80000000000000000000000000000000", + "free": "(rounded 760000000)", + "frozen": 0, + "reserved": 0, + }, + "nonce": 0, + "providers": 1, + "sufficients": 0, +} +`; + +exports[`integriteeKusama & assetHubKusama > integriteeKusama transfer KSM to assetHubKusama > from chain hrmp messages 1`] = ` +[ + { + "data": [ + "ConcatenatedVersionedXcm", + { + "v3": [ + { + "withdrawAsset": [ + { + "fun": { + "fungible": 1000000000, + }, + "id": { + "concrete": { + "interior": { + "here": null, + }, + "parents": 1, + }, + }, + }, + ], + }, + { + "clearOrigin": null, + }, + { + "buyExecution": { + "fees": { + "fun": { + "fungible": 1000000000, + }, + "id": { + "concrete": { + "interior": { + "here": null, + }, + "parents": 1, + }, + }, + }, + "weightLimit": { + "unlimited": null, + }, + }, + }, + { + "depositAsset": { + "assets": { + "wild": { + "allCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "x1": { + "accountId32": { + "id": "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48", + "network": null, + }, + }, + }, + "parents": 0, + }, + }, + }, + ], + }, + ], + "recipient": 1000, + }, +] +`; + +exports[`integriteeKusama & assetHubKusama > integriteeKusama transfer KSM to assetHubKusama > to chain xcm events 1`] = ` +[ + { + "data": { + "id": "(hash)", + "origin": { + "Sibling": "(rounded 2000)", + }, + "success": true, + "weightUsed": { + "proofSize": "(rounded 7200)", + "refTime": "(rounded 320000000)", + }, + }, + "method": "Processed", + "section": "messageQueue", + }, +] +`; + +exports[`integriteeKusama & assetHubKusama > integriteeKusama transfer KSM to assetHubKusama > tx events 1`] = ` +[ + { + "data": { + "outcome": { + "Complete": { + "used": { + "proofSize": "(rounded 2000)", + "refTime": 2000000, + }, + }, + }, + }, + "method": "Attempted", + "section": "polkadotXcm", + }, + { + "data": { + "fees": [], + "paying": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Kusama", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "FeesPaid", + "section": "polkadotXcm", + }, + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": 1000, + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "WithdrawAsset": [ + { + "fun": { + "Fungible": 1000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": { + "AllCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Kusama", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; diff --git a/packages/kusama/src/integritee.assetHubKusama.test.ts b/packages/kusama/src/integritee.assetHubKusama.test.ts new file mode 100644 index 000000000..e9359e220 --- /dev/null +++ b/packages/kusama/src/integritee.assetHubKusama.test.ts @@ -0,0 +1,44 @@ +import { describe } from 'vitest' + +import { defaultAccountsSr25519 } from '@e2e-test/networks' +import { assetHubKusama, integriteeKusama } from '@e2e-test/networks/chains' +import { setupNetworks } from '@e2e-test/shared' +import { query, tx } from '@e2e-test/shared/api' +import { runXcmPalletHorizontal } from '@e2e-test/shared/xcm' + +describe('integriteeKusama & assetHubKusama', async () => { + const [assetHubKusamaClient, integriteeKusamaClient] = await setupNetworks(assetHubKusama, integriteeKusama) + + runXcmPalletHorizontal('assetHubKusama transfer KSM to integriteeKusama', async () => { + return { + fromChain: assetHubKusamaClient, + toChain: integriteeKusamaClient, + fromAccount: defaultAccountsSr25519.alice, + toAccount: defaultAccountsSr25519.bob, + fromBalance: query.balances, + toBalance: query.assets(integriteeKusama.custom.assetIdRelayNative), + tx: tx.xcmPallet.limitedReserveTransferAssetsV3( + assetHubKusama.custom.ksm, + 1e12, + tx.xcmPallet.parachainV3(1, integriteeKusama.paraId!), + ), + } + }) + + runXcmPalletHorizontal('integriteeKusama transfer KSM to assetHubKusama', async () => { + return { + fromChain: integriteeKusamaClient, + toChain: assetHubKusamaClient, + fromAccount: defaultAccountsSr25519.alice, + toAccount: defaultAccountsSr25519.bob, + fromBalance: query.assets(integriteeKusama.custom.assetIdRelayNative), + toBalance: query.balances, + tx: tx.xcmPallet.limitedReserveTransferAssetsV3( + integriteeKusama.custom.xcmRelayNative, + // if its too much, it exhausts the sibling reserve. if its too little assets will be trapped because fees are higher than amount + 1e9, + tx.xcmPallet.parachainV3(1, assetHubKusama.paraId!), + ), + } + }) +}) diff --git a/packages/networks/src/chains/index.ts b/packages/networks/src/chains/index.ts index 13ca9f24a..b2976f591 100644 --- a/packages/networks/src/chains/index.ts +++ b/packages/networks/src/chains/index.ts @@ -5,6 +5,7 @@ export * from './bridgehub.js' export * from './coretime.js' export * from './collectives.js' export * from './hydration.js' +export * from './integritee.js' export * from './moonbeam.js' export * from './people.js' export * from './polkadot.js' diff --git a/packages/networks/src/chains/integritee.ts b/packages/networks/src/chains/integritee.ts new file mode 100644 index 000000000..c4320ca40 --- /dev/null +++ b/packages/networks/src/chains/integritee.ts @@ -0,0 +1,55 @@ +import { defaultAccounts, defaultAccountsSr25519 } from '../defaultAccounts.js' +import { defineChain } from '../defineChain.js' + +const custom = { + integriteePolkadot: { + xcmTeer: { Concrete: { parents: 0, interior: 'Here' } }, + xcmRelayNative: { Concrete: { parents: 1, interior: 'Here' } }, + assetIdRelayNative: 0, + }, + integriteeKusama: { + xcmTeer: { Concrete: { parents: 0, interior: 'Here' } }, + xcmRelayNative: { Concrete: { parents: 1, interior: 'Here' } }, + assetIdRelayNative: 0, + }, +} + +const getInitStorages = (config: typeof custom.integriteePolkadot | typeof custom.integriteeKusama) => ({ + System: { + account: [ + // legacy. not needed for own tests + [[defaultAccounts.alice.address], { providers: 1, data: { free: 1000e12 } }], + // this is what will be used (for easier debugging in PJS) + [[defaultAccountsSr25519.alice.address], { providers: 1, data: { free: 1000e12 } }], + ], + }, + Assets: { + account: [ + // legacy. not needed for own tests + [[config.assetIdRelayNative, defaultAccounts.alice.address], { balance: 1000e12 }], + // this is what will be used (for easier debugging in PJS) + [[config.assetIdRelayNative, defaultAccountsSr25519.alice.address], { balance: 1000e12 }], + ], + }, + // this acceleration can cause mismatches. use with care! + PolkadotXcm: { + // avoid sending xcm version change notifications to makes things faster + $removePrefix: ['versionNotifyTargets', 'versionNotifiers', 'supportedVersion'], + }, +}) + +export const integriteePolkadot = defineChain({ + name: 'integritee-polkadot', + paraId: 2039, + endpoint: 'wss://polkadot.api.integritee.network', + custom: custom.integriteePolkadot, + initStorages: getInitStorages(custom.integriteePolkadot), +}) + +export const integriteeKusama = defineChain({ + name: 'integritee-kusama', + paraId: 2015, + endpoint: 'wss://kusama.api.integritee.network', + custom: custom.integriteeKusama, + initStorages: getInitStorages(custom.integriteeKusama), +}) diff --git a/packages/polkadot/src/__snapshots__/integritee.assetHubPolkadot.test.ts.snap b/packages/polkadot/src/__snapshots__/integritee.assetHubPolkadot.test.ts.snap new file mode 100644 index 000000000..9593f7724 --- /dev/null +++ b/packages/polkadot/src/__snapshots__/integritee.assetHubPolkadot.test.ts.snap @@ -0,0 +1,498 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`integriteePolkadot & assetHubPolkadot > assetHubPolkadot transfer DOT to integriteePolkadot > balance on from chain 1`] = ` +{ + "consumers": 0, + "data": { + "flags": "0x80000000000000000000000000000000", + "free": "(rounded 9000000000000)", + "frozen": 0, + "reserved": 0, + }, + "nonce": 1, + "providers": 1, + "sufficients": 0, +} +`; + +exports[`integriteePolkadot & assetHubPolkadot > assetHubPolkadot transfer DOT to integriteePolkadot > balance on to chain 1`] = ` +{ + "balance": "(rounded 1000000000000)", + "extra": null, + "reason": { + "sufficient": null, + }, + "status": "Liquid", +} +`; + +exports[`integriteePolkadot & assetHubPolkadot > assetHubPolkadot transfer DOT to integriteePolkadot > from chain hrmp messages 1`] = ` +[ + { + "data": [ + "ConcatenatedVersionedXcm", + { + "v3": [ + { + "reserveAssetDeposited": [ + { + "fun": { + "fungible": 1000000000000, + }, + "id": { + "concrete": { + "interior": { + "here": null, + }, + "parents": 1, + }, + }, + }, + ], + }, + { + "clearOrigin": null, + }, + { + "buyExecution": { + "fees": { + "fun": { + "fungible": 1000000000000, + }, + "id": { + "concrete": { + "interior": { + "here": null, + }, + "parents": 1, + }, + }, + }, + "weightLimit": { + "unlimited": null, + }, + }, + }, + { + "depositAsset": { + "assets": { + "wild": { + "allCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "x1": { + "accountId32": { + "id": "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48", + "network": null, + }, + }, + }, + "parents": 0, + }, + }, + }, + { + "setTopic": "(redacted)", + }, + ], + }, + ], + "recipient": 2039, + }, +] +`; + +exports[`integriteePolkadot & assetHubPolkadot > assetHubPolkadot transfer DOT to integriteePolkadot > to chain xcm events 1`] = ` +[ + { + "data": { + "id": "(hash)", + "origin": { + "Sibling": 1000, + }, + "success": true, + "weightUsed": { + "proofSize": "(rounded 5100)", + "refTime": 5000000, + }, + }, + "method": "Processed", + "section": "messageQueue", + }, +] +`; + +exports[`integriteePolkadot & assetHubPolkadot > assetHubPolkadot transfer DOT to integriteePolkadot > tx events 1`] = ` +[ + { + "data": { + "outcome": { + "Complete": { + "used": { + "proofSize": "(rounded 6200)", + "refTime": "(rounded 310000000)", + }, + }, + }, + }, + "method": "Attempted", + "section": "polkadotXcm", + }, + { + "data": { + "fees": [ + { + "fun": { + "Fungible": "(rounded 300000000)", + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + ], + "paying": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "FeesPaid", + "section": "polkadotXcm", + }, + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": "(rounded 2000)", + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "ReserveAssetDeposited": [ + { + "fun": { + "Fungible": 1000000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": { + "AllCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; + +exports[`integriteePolkadot & assetHubPolkadot > integriteePolkadot transfer DOT to assetHubPolkadot > balance on from chain 1`] = ` +{ + "balance": "(rounded 1000000000000000)", + "extra": null, + "reason": { + "consumer": null, + }, + "status": "Liquid", +} +`; + +exports[`integriteePolkadot & assetHubPolkadot > integriteePolkadot transfer DOT to assetHubPolkadot > balance on to chain 1`] = ` +{ + "consumers": 0, + "data": { + "flags": "0x80000000000000000000000000000000", + "free": "(rounded 964000000)", + "frozen": 0, + "reserved": 0, + }, + "nonce": 0, + "providers": 1, + "sufficients": 0, +} +`; + +exports[`integriteePolkadot & assetHubPolkadot > integriteePolkadot transfer DOT to assetHubPolkadot > from chain hrmp messages 1`] = ` +[ + { + "data": [ + "ConcatenatedVersionedXcm", + { + "v3": [ + { + "withdrawAsset": [ + { + "fun": { + "fungible": 1000000000, + }, + "id": { + "concrete": { + "interior": { + "here": null, + }, + "parents": 1, + }, + }, + }, + ], + }, + { + "clearOrigin": null, + }, + { + "buyExecution": { + "fees": { + "fun": { + "fungible": 1000000000, + }, + "id": { + "concrete": { + "interior": { + "here": null, + }, + "parents": 1, + }, + }, + }, + "weightLimit": { + "unlimited": null, + }, + }, + }, + { + "depositAsset": { + "assets": { + "wild": { + "allCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "x1": { + "accountId32": { + "id": "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48", + "network": null, + }, + }, + }, + "parents": 0, + }, + }, + }, + ], + }, + ], + "recipient": 1000, + }, +] +`; + +exports[`integriteePolkadot & assetHubPolkadot > integriteePolkadot transfer DOT to assetHubPolkadot > to chain xcm events 1`] = ` +[ + { + "data": { + "id": "(hash)", + "origin": { + "Sibling": "(rounded 2000)", + }, + "success": true, + "weightUsed": { + "proofSize": "(rounded 7200)", + "refTime": "(rounded 320000000)", + }, + }, + "method": "Processed", + "section": "messageQueue", + }, +] +`; + +exports[`integriteePolkadot & assetHubPolkadot > integriteePolkadot transfer DOT to assetHubPolkadot > tx events 1`] = ` +[ + { + "data": { + "outcome": { + "Complete": { + "used": { + "proofSize": "(rounded 2000)", + "refTime": 2000000, + }, + }, + }, + }, + "method": "Attempted", + "section": "polkadotXcm", + }, + { + "data": { + "fees": [], + "paying": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "FeesPaid", + "section": "polkadotXcm", + }, + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": 1000, + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "WithdrawAsset": [ + { + "fun": { + "Fungible": 1000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": { + "AllCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; diff --git a/packages/polkadot/src/integritee.assetHubPolkadot.test.ts b/packages/polkadot/src/integritee.assetHubPolkadot.test.ts new file mode 100644 index 000000000..dea505029 --- /dev/null +++ b/packages/polkadot/src/integritee.assetHubPolkadot.test.ts @@ -0,0 +1,44 @@ +import { describe } from 'vitest' + +import { defaultAccountsSr25519 } from '@e2e-test/networks' +import { assetHubPolkadot, integriteePolkadot } from '@e2e-test/networks/chains' +import { setupNetworks } from '@e2e-test/shared' +import { query, tx } from '@e2e-test/shared/api' +import { runXcmPalletHorizontal } from '@e2e-test/shared/xcm' + +describe('integriteePolkadot & assetHubPolkadot', async () => { + const [assetHubPolkadotClient, integriteePolkadotClient] = await setupNetworks(assetHubPolkadot, integriteePolkadot) + + runXcmPalletHorizontal('assetHubPolkadot transfer DOT to integriteePolkadot', async () => { + return { + fromChain: assetHubPolkadotClient, + toChain: integriteePolkadotClient, + fromAccount: defaultAccountsSr25519.alice, + toAccount: defaultAccountsSr25519.bob, + fromBalance: query.balances, + toBalance: query.assets(integriteePolkadot.custom.assetIdRelayNative), + tx: tx.xcmPallet.limitedReserveTransferAssetsV3( + assetHubPolkadot.custom.dot, + 1e12, + tx.xcmPallet.parachainV3(1, integriteePolkadot.paraId!), + ), + } + }) + + runXcmPalletHorizontal('integriteePolkadot transfer DOT to assetHubPolkadot', async () => { + return { + fromChain: integriteePolkadotClient, + toChain: assetHubPolkadotClient, + fromAccount: defaultAccountsSr25519.alice, + toAccount: defaultAccountsSr25519.bob, + fromBalance: query.assets(integriteePolkadot.custom.assetIdRelayNative), + toBalance: query.balances, + tx: tx.xcmPallet.limitedReserveTransferAssetsV3( + integriteePolkadot.custom.xcmRelayNative, + // if its too much, it exhausts the sibling reserve. if its too little assets will be trapped because fees are higher than amount + 1e9, + tx.xcmPallet.parachainV3(1, assetHubPolkadot.paraId!), + ), + } + }) +})