difftreelog
refactor xcm Unq tests
in: master
3 files changed
tests/src/xcm/lowLevelXcmUnique.test.tsdiffbeforeafterboth17import {IKeyringPair} from '@polkadot/types/types';17import {IKeyringPair} from '@polkadot/types/types';18import config from '../config';18import config from '../config';19import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingMoonbeamPlaygrounds, usingAstarPlaygrounds, usingPolkadexPlaygrounds} from '../util';19import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingMoonbeamPlaygrounds, usingAstarPlaygrounds, usingPolkadexPlaygrounds} from '../util';20import {DevUniqueHelper, Event} from '../util/playgrounds/unique.dev';20import {Event} from '../util/playgrounds/unique.dev';21import {nToBigInt} from '@polkadot/util';21import {nToBigInt} from '@polkadot/util';22import {hexToString} from '@polkadot/util';22import {hexToString} from '@polkadot/util';2324const UNIQUE_CHAIN = +(process.env.RELAY_UNIQUE_ID || 2037);23import {ASTAR_DECIMALS, NETWORKS, SAFE_XCM_VERSION, UNIQUE_CHAIN, UNQ_DECIMALS, acalaUrl, astarUrl, expectFailedToTransact, expectUntrustedReserveLocationFail, getDevPlayground, mapToChainId, mapToChainUrl, maxWaitBlocks, moonbeamUrl, polkadexUrl, uniqueAssetId, uniqueVersionedMultilocation} from './xcm.types';25const ACALA_CHAIN = +(process.env.RELAY_ACALA_ID || 2000);2426const MOONBEAM_CHAIN = +(process.env.RELAY_MOONBEAM_ID || 2004);27const ASTAR_CHAIN = +(process.env.RELAY_ASTAR_ID || 2006);28const POLKADEX_CHAIN = +(process.env.RELAY_POLKADEX_ID || 2040);29303132const acalaUrl = config.acalaUrl;33const moonbeamUrl = config.moonbeamUrl;34const astarUrl = config.astarUrl;35const polkadexUrl = config.polkadexUrl;3637const ASTAR_DECIMALS = 18n;38const UNQ_DECIMALS = 18n;392540const TRANSFER_AMOUNT = 2000000_000_000_000_000_000_000n;26const TRANSFER_AMOUNT = 2000000_000_000_000_000_000_000n;41const SENDER_BUDGET = 2n * TRANSFER_AMOUNT;27const SENDER_BUDGET = 2n * TRANSFER_AMOUNT;42const SENDBACK_AMOUNT = TRANSFER_AMOUNT / 2n;28const SENDBACK_AMOUNT = TRANSFER_AMOUNT / 2n;43const STAYED_ON_TARGET_CHAIN = TRANSFER_AMOUNT - SENDBACK_AMOUNT;29const STAYED_ON_TARGET_CHAIN = TRANSFER_AMOUNT - SENDBACK_AMOUNT;44const TARGET_CHAIN_TOKEN_TRANSFER_AMOUNT = 100_000_000_000n;30const TARGET_CHAIN_TOKEN_TRANSFER_AMOUNT = 100_000_000_000n;4546const SAFE_XCM_VERSION = 2;47const maxWaitBlocks = 6;4849const uniqueMultilocation = {50 V2: {51 parents: 1,52 interior: {53 X1: {54 Parachain: UNIQUE_CHAIN,55 },56 },57 },58};593160let balanceUniqueTokenInit: bigint;32let balanceUniqueTokenInit: bigint;61let balanceUniqueTokenMiddle: bigint;33let balanceUniqueTokenMiddle: bigint;62let balanceUniqueTokenFinal: bigint;34let balanceUniqueTokenFinal: bigint;63let unqFees: bigint;35let unqFees: bigint;6465const expectFailedToTransact = async (helper: DevUniqueHelper, messageSent: any) => {66 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == messageSent.messageHash67 && event.outcome.isFailedToTransactAsset);68};69const expectUntrustedReserveLocationFail = async (helper: DevUniqueHelper, messageSent: any) => {70 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == messageSent.messageHash71 && event.outcome.isUntrustedReserveLocation);72};7374const NETWORKS = {75 acala: usingAcalaPlaygrounds,76 astar: usingAstarPlaygrounds,77 polkadex: usingPolkadexPlaygrounds,78 moonbeam: usingMoonbeamPlaygrounds,79} as const;8081function mapToChainId(networkName: keyof typeof NETWORKS) {82 switch (networkName) {83 case 'acala':84 return ACALA_CHAIN;85 case 'astar':86 return ASTAR_CHAIN;87 case 'moonbeam':88 return MOONBEAM_CHAIN;89 case 'polkadex':90 return POLKADEX_CHAIN;91 }92}9394function mapToChainUrl(networkName: keyof typeof NETWORKS): string {95 switch (networkName) {96 case 'acala':97 return acalaUrl;98 case 'astar':99 return astarUrl;100 case 'moonbeam':101 return moonbeamUrl;102 case 'polkadex':103 return polkadexUrl;104 }105}106107function getDevPlayground<T extends keyof typeof NETWORKS>(name: T) {108 return NETWORKS[name];109}1103611137112async function genericSendUnqTo(38async function genericSendUnqTo(227153228 await targetPlayground(networkUrl, async (helper) => {154 await targetPlayground(networkUrl, async (helper) => {229 if('getSudo' in helper) {155 if('getSudo' in helper) {230 await helper.getSudo().xcm.send(sudoer, uniqueMultilocation, xcmProgram);156 await helper.getSudo().xcm.send(sudoer, uniqueVersionedMultilocation, xcmProgram);231 xcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);157 xcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);232 } else if('fastDemocracy' in helper) {158 } else if('fastDemocracy' in helper) {233 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueMultilocation, xcmProgram]);159 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, xcmProgram]);234 // Needed to bypass the call filter.160 // Needed to bypass the call filter.235 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);161 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);236 await helper.fastDemocracy.executeProposal('sending MoonBeam -> Unique via XCM program', batchCall);162 await helper.fastDemocracy.executeProposal(`sending ${networkName} -> Unique via XCM program`, batchCall);237 xcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);163 xcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);238 }164 }239 });165 });279205280 await targetPlayground(networkUrl, async (helper) => {206 await targetPlayground(networkUrl, async (helper) => {281 if('getSudo' in helper) {207 if('getSudo' in helper) {282 await helper.getSudo().xcm.send(sudoer, uniqueMultilocation, maliciousXcmProgram);208 await helper.getSudo().xcm.send(sudoer, uniqueVersionedMultilocation, maliciousXcmProgram);283 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);209 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);284 } else if('fastDemocracy' in helper) {210 } else if('fastDemocracy' in helper) {285 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueMultilocation, maliciousXcmProgram]);211 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgram]);286 // Needed to bypass the call filter.212 // Needed to bypass the call filter.287 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);213 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);288 await helper.fastDemocracy.executeProposal('sending MoonBeam -> Unique via XCM program', batchCall);214 await helper.fastDemocracy.executeProposal(`sending ${networkName} -> Unique via XCM program`, batchCall);289 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);215 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);290 }216 }291 });217 });338 // Try to trick Unique using full UNQ identification264 // Try to trick Unique using full UNQ identification339 await targetPlayground(networkUrl, async (helper) => {265 await targetPlayground(networkUrl, async (helper) => {340 if('getSudo' in helper) {266 if('getSudo' in helper) {341 await helper.getSudo().xcm.send(sudoer, uniqueMultilocation, maliciousXcmProgramFullId);267 await helper.getSudo().xcm.send(sudoer, uniqueVersionedMultilocation, maliciousXcmProgramFullId);342 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);268 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);343 }269 }344 // Moonbeam case270 // Moonbeam case345 else if('fastDemocracy' in helper) {271 else if('fastDemocracy' in helper) {346 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueMultilocation, maliciousXcmProgramFullId]);272 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgramFullId]);347348 // Needed to bypass the call filter.273 // Needed to bypass the call filter.349 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);274 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);350 await helper.fastDemocracy.executeProposal('try to act like a reserve location for UNQ using path asset identification', batchCall);275 await helper.fastDemocracy.executeProposal(`${netwokrName} try to act like a reserve location for UNQ using path asset identification`,batchCall);351276352 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);277 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);353 }278 }362 // Try to trick Unique using shortened UNQ identification287 // Try to trick Unique using shortened UNQ identification363 await targetPlayground(networkUrl, async (helper) => {288 await targetPlayground(networkUrl, async (helper) => {364 if('getSudo' in helper) {289 if('getSudo' in helper) {365 await helper.getSudo().xcm.send(sudoer, uniqueMultilocation, maliciousXcmProgramHereId);290 await helper.getSudo().xcm.send(sudoer, uniqueVersionedMultilocation, maliciousXcmProgramHereId);366 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);291 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);367 }292 }368 else if('fastDemocracy' in helper) {293 else if('fastDemocracy' in helper) {369 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueMultilocation, maliciousXcmProgramHereId]);294 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgramHereId]);370371 // Needed to bypass the call filter.295 // Needed to bypass the call filter.372 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);296 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);373 await helper.fastDemocracy.executeProposal('try to act like a reserve location for UNQ using "here" asset identification', batchCall);297 await helper.fastDemocracy.executeProposal(`${netwokrName} try to act like a reserve location for UNQ using "here" asset identification`, batchCall);374298375 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);299 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);376 }300 }405 );329 );406 await targetPlayground(networkUrl, async (helper) => {330 await targetPlayground(networkUrl, async (helper) => {407 if('getSudo' in helper) {331 if('getSudo' in helper) {408 await helper.getSudo().xcm.send(sudoerOnTargetChain, uniqueMultilocation, maliciousXcmProgramFullId);332 await helper.getSudo().xcm.send(sudoerOnTargetChain, uniqueVersionedMultilocation, maliciousXcmProgramFullId);409 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);333 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);410 } else if('fastDemocracy' in helper) {334 } else if('fastDemocracy' in helper) {411 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueMultilocation, maliciousXcmProgramFullId]);335 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgramFullId]);412413 // Needed to bypass the call filter.336 // Needed to bypass the call filter.414 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);337 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);415 await helper.fastDemocracy.executeProposal('sending native tokens to the Unique via fast democracy', batchCall);338 await helper.fastDemocracy.executeProposal(`${netwokrName} sending native tokens to the Unique via fast democracy`, batchCall);416339417 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);340 messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);418 }341 }493 let alice: IKeyringPair;415 let alice: IKeyringPair;494 let randomAccount: IKeyringPair;416 let randomAccount: IKeyringPair;495496 const uniqueAssetId = {497 Concrete: {498 parents: 1,499 interior: {500 X1: {501 Parachain: UNIQUE_CHAIN,502 },503 },504 },505 };506417507 before(async () => {418 before(async () => {508 await usingPlaygrounds(async (helper, privateKey) => {419 await usingPlaygrounds(async (helper, privateKey) => {523 if it is added again. Needed for debugging434 if it is added again. Needed for debugging524 when this test is run multiple times.435 when this test is run multiple times.525 */436 */526 if(!isWhitelisted) {437 if(isWhitelisted) {438 console.log('UNQ token is already whitelisted on Polkadex');439 } else {527 await helper.getSudo().xcmHelper.whitelistToken(alice, uniqueAssetId);440 await helper.getSudo().xcmHelper.whitelistToken(alice, uniqueAssetId);528 }441 }529442639 const numAssetsWeightHint = 0;552 const numAssetsWeightHint = 0;640553641 if((await helper.assetManager.assetTypeId(uniqueAssetLocation)).toJSON()) {554 if((await helper.assetManager.assetTypeId(uniqueAssetLocation)).toJSON()) {642 console.log('Unique asset already registered');555 console.log('Unique asset already registered on Moonbeam');643 } else {556 } else {644 const encodedProposal = helper.assetManager.makeRegisterForeignAssetProposal({557 const encodedProposal = helper.assetManager.makeRegisterForeignAssetProposal({645 location: uniqueAssetLocation,558 location: uniqueAssetLocation,750663751 console.log('3. Set UNQ payment for XCM execution on Astar');664 console.log('3. Set UNQ payment for XCM execution on Astar');752 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]);665 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]);753 }666 } else {667 console.log('UNQ is already registered on Astar');668 }754 console.log('4. Transfer 1 ASTR to recipient to create the account (needed due to existential balance)');669 console.log('4. Transfer 1 ASTR to recipient to create the account (needed due to existential balance)');755 await helper.balance.transferToSubstrate(alice, randomAccount.address, astarInitialBalance);670 await helper.balance.transferToSubstrate(alice, randomAccount.address, astarInitialBalance);756 });671 });tests/src/xcm/xcm.types.tsdiffbeforeafterbothno changes
tests/src/xcm/xcmUnique.test.tsdiffbeforeafterboth17import {IKeyringPair} from '@polkadot/types/types';17import {IKeyringPair} from '@polkadot/types/types';18import config from '../config';18import config from '../config';19import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingRelayPlaygrounds, usingMoonbeamPlaygrounds, usingStatemintPlaygrounds, usingAstarPlaygrounds, usingPolkadexPlaygrounds} from '../util';19import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingRelayPlaygrounds, usingMoonbeamPlaygrounds, usingStatemintPlaygrounds, usingAstarPlaygrounds, usingPolkadexPlaygrounds} from '../util';20import {DevUniqueHelper, Event} from '../util/playgrounds/unique.dev';20import {Event} from '../util/playgrounds/unique.dev';21import {hexToString, nToBigInt} from '@polkadot/util';21import {hexToString, nToBigInt} from '@polkadot/util';2223const UNIQUE_CHAIN = +(process.env.RELAY_UNIQUE_ID || 2037);22import {ACALA_CHAIN, ASTAR_CHAIN, MOONBEAM_CHAIN, POLKADEX_CHAIN, SAFE_XCM_VERSION, STATEMINT_CHAIN, UNIQUE_CHAIN, expectFailedToTransact, expectUntrustedReserveLocationFail, uniqueAssetId, uniqueVersionedMultilocation} from './xcm.types';24const STATEMINT_CHAIN = +(process.env.RELAY_STATEMINT_ID || 1000);2325const ACALA_CHAIN = +(process.env.RELAY_ACALA_ID || 2000);26const MOONBEAM_CHAIN = +(process.env.RELAY_MOONBEAM_ID || 2004);27const ASTAR_CHAIN = +(process.env.RELAY_ASTAR_ID || 2006);28const POLKADEX_CHAIN = +(process.env.RELAY_POLKADEX_ID || 2040);292430const STATEMINT_PALLET_INSTANCE = 50;25const STATEMINT_PALLET_INSTANCE = 50;312655const USDT_ASSET_METADATA_MINIMAL_BALANCE = 1n;50const USDT_ASSET_METADATA_MINIMAL_BALANCE = 1n;56const USDT_ASSET_AMOUNT = 10_000_000_000_000_000_000_000_000n;51const USDT_ASSET_AMOUNT = 10_000_000_000_000_000_000_000_000n;575258const SAFE_XCM_VERSION = 2;59const maxWaitBlocks = 6;6061const uniqueMultilocation = {62 V2: {63 parents: 1,64 interior: {65 X1: {66 Parachain: UNIQUE_CHAIN,67 },68 },69 },70};7172const expectFailedToTransact = async (helper: DevUniqueHelper, messageSent: any) => {73 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == messageSent.messageHash74 && event.outcome.isFailedToTransactAsset);75};76const expectUntrustedReserveLocationFail = async (helper: DevUniqueHelper, messageSent: any) => {77 await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.Fail, event => event.messageHash == messageSent.messageHash78 && event.outcome.isUntrustedReserveLocation);79};80describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => {53describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => {81 let alice: IKeyringPair;54 let alice: IKeyringPair;82 let bob: IKeyringPair;55 let bob: IKeyringPair;704677705 // Try to trick Unique678 // Try to trick Unique706 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {679 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {707 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgram);680 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgram);708681709 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);682 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);710 });683 });729 );702 );730703731 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {704 await usingAcalaPlaygrounds(acalaUrl, async (helper) => {732 await helper.getSudo().xcm.send(alice, uniqueMultilocation, validXcmProgram);705 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, validXcmProgram);733 });706 });734707735 await helper.wait.newBlocks(maxWaitBlocks);708 await helper.wait.newBlocks(maxWaitBlocks);820 let balanceUniqueTokenFinal: bigint;793 let balanceUniqueTokenFinal: bigint;821 const maxWaitBlocks = 6;794 const maxWaitBlocks = 6;822823 const uniqueAssetId = {824 Concrete: {825 parents: 1,826 interior: {827 X1: {828 Parachain: UNIQUE_CHAIN,829 },830 },831 },832 };833795834 before(async () => {796 before(async () => {835 await usingPlaygrounds(async (helper, privateKey) => {797 await usingPlaygrounds(async (helper, privateKey) => {850 if it is added again. Needed for debugging812 if it is added again. Needed for debugging851 when this test is run multiple times.813 when this test is run multiple times.852 */814 */853 if(!isWhitelisted) {815 if(isWhitelisted) {816 console.log('UNQ token is already whitelisted on Polkadex');817 } else {854 await helper.getSudo().xcmHelper.whitelistToken(alice, uniqueAssetId);818 await helper.getSudo().xcmHelper.whitelistToken(alice, uniqueAssetId);855 }819 }856820951915952916953 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {917 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {954 await helper.getSudo().xcm.send(alice, uniqueMultilocation, xcmProgram);918 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, xcmProgram);955919956 xcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);920 xcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);957 });921 });986950987951988 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {952 await usingPolkadexPlaygrounds(polkadexUrl, async (helper) => {989 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgram);953 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgram);990954991 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);955 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);992 });956 });146514291466 // Try to trick Unique1430 // Try to trick Unique1467 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1431 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1468 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueMultilocation, maliciousXcmProgram]);1432 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgram]);146914331470 // Needed to bypass the call filter.1434 // Needed to bypass the call filter.1471 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1435 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1494 );1458 );149514591496 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1460 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1497 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueMultilocation, validXcmProgram]);1461 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, validXcmProgram]);149814621499 // Needed to bypass the call filter.1463 // Needed to bypass the call filter.1500 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1464 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);154315071544 // Try to trick Unique using full UNQ identification1508 // Try to trick Unique using full UNQ identification1545 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1509 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1546 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueMultilocation, maliciousXcmProgramFullId]);1510 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgramFullId]);154715111548 // Needed to bypass the call filter.1512 // Needed to bypass the call filter.1549 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1513 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);156015241561 // Try to trick Unique using shortened UNQ identification1525 // Try to trick Unique using shortened UNQ identification1562 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1526 await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => {1563 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueMultilocation, maliciousXcmProgramHereId]);1527 const xcmSend = helper.constructApiCall('api.tx.polkadotXcm.send', [uniqueVersionedMultilocation, maliciousXcmProgramHereId]);156415281565 // Needed to bypass the call filter.1529 // Needed to bypass the call filter.1566 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);1530 const batchCall = helper.encodeApiCall('api.tx.utility.batch', [[xcmSend]]);164116051642 console.log('3. Set UNQ payment for XCM execution on Astar');1606 console.log('3. Set UNQ payment for XCM execution on Astar');1643 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]);1607 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]);1644 }1608 } else {1609 console.log('UNQ is already registered on Astar');1610 }1645 console.log('4. Transfer 1 ASTR to recipient to create the account (needed due to existential balance)');1611 console.log('4. Transfer 1 ASTR to recipient to create the account (needed due to existential balance)');1646 await helper.balance.transferToSubstrate(alice, randomAccount.address, astarInitialBalance);1612 await helper.balance.transferToSubstrate(alice, randomAccount.address, astarInitialBalance);1647 });1613 });181517811816 // Try to trick Unique1782 // Try to trick Unique1817 await usingAstarPlaygrounds(astarUrl, async (helper) => {1783 await usingAstarPlaygrounds(astarUrl, async (helper) => {1818 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgram);1784 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgram);181917851820 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1786 maliciousXcmProgramSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1821 });1787 });1840 );1806 );184118071842 await usingAstarPlaygrounds(astarUrl, async (helper) => {1808 await usingAstarPlaygrounds(astarUrl, async (helper) => {1843 await helper.getSudo().xcm.send(alice, uniqueMultilocation, validXcmProgram);1809 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, validXcmProgram);1844 });1810 });184518111846 await helper.wait.newBlocks(maxWaitBlocks);1812 await helper.wait.newBlocks(maxWaitBlocks);188518511886 // Try to trick Unique using full UNQ identification1852 // Try to trick Unique using full UNQ identification1887 await usingAstarPlaygrounds(astarUrl, async (helper) => {1853 await usingAstarPlaygrounds(astarUrl, async (helper) => {1888 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgramFullId);1854 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgramFullId);188918551890 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1856 maliciousXcmProgramFullIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1891 });1857 });189818641899 // Try to trick Unique using shortened UNQ identification1865 // Try to trick Unique using shortened UNQ identification1900 await usingAstarPlaygrounds(astarUrl, async (helper) => {1866 await usingAstarPlaygrounds(astarUrl, async (helper) => {1901 await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgramHereId);1867 await helper.getSudo().xcm.send(alice, uniqueVersionedMultilocation, maliciousXcmProgramHereId);190218681903 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1869 maliciousXcmProgramHereIdSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);1904 });1870 });