git.delta.rocks / unique-network / refs/commits / 383d45a29a75

difftreelog

source

tests/src/util/playgrounds/unique.xcm.ts7.7 KiBsourcehistory
12import {ApiPromise, WsProvider} from '@polkadot/api';3import {AssetsGroup, ChainHelperBase, EthereumBalanceGroup, HelperGroup, SubstrateBalanceGroup, TokensGroup, UniqueHelper, XTokensGroup, XcmGroup} from './unique';4import {ILogger,  TSigner} from './types';5import {SudoHelper} from './unique.dev';6import {AcalaAssetMetadata, DemocracyStandardAccountVote, MoonbeamAssetInfo} from './types.xcm';78export class XcmChainHelper extends ChainHelperBase {9  async connect(wsEndpoint: string, _listeners?: any): Promise<void> {10    const wsProvider = new WsProvider(wsEndpoint);11    this.api = new ApiPromise({12      provider: wsProvider,13    });14    await this.api.isReadyOrError;15    this.network = await UniqueHelper.detectNetwork(this.api);16  }17}1819class AcalaAssetRegistryGroup extends HelperGroup<AcalaHelper> {20  async registerForeignAsset(signer: TSigner, destination: any, metadata: AcalaAssetMetadata) {21    await this.helper.executeExtrinsic(signer, 'api.tx.assetRegistry.registerForeignAsset', [destination, metadata], true);22  }23}2425class MoonbeamAssetManagerGroup extends HelperGroup<MoonbeamHelper> {26  makeRegisterForeignAssetProposal(assetInfo: MoonbeamAssetInfo) {27    const apiPrefix = 'api.tx.assetManager.';2829    const registerTx = this.helper.constructApiCall(30      apiPrefix + 'registerForeignAsset',31      [assetInfo.location, assetInfo.metadata, assetInfo.existentialDeposit, assetInfo.isSufficient],32    );3334    const setUnitsTx = this.helper.constructApiCall(35      apiPrefix + 'setAssetUnitsPerSecond',36      [assetInfo.location, assetInfo.unitsPerSecond, assetInfo.numAssetsWeightHint],37    );3839    const batchCall = this.helper.getApi().tx.utility.batchAll([registerTx, setUnitsTx]);40    const encodedProposal = batchCall?.method.toHex() || '';41    return encodedProposal;42  }4344  async assetTypeId(location: any) {45    return await this.helper.callRpc('api.query.assetManager.assetTypeId', [location]);46  }47}4849class MoonbeamDemocracyGroup extends HelperGroup<MoonbeamHelper> {50  notePreimagePallet: string;5152  constructor(helper: MoonbeamHelper, options: { [key: string]: any } = {}) {53    super(helper);54    this.notePreimagePallet = options.notePreimagePallet;55  }5657  async notePreimage(signer: TSigner, encodedProposal: string) {58    await this.helper.executeExtrinsic(signer, `api.tx.${this.notePreimagePallet}.notePreimage`, [encodedProposal], true);59  }6061  externalProposeMajority(proposal: any) {62    return this.helper.constructApiCall('api.tx.democracy.externalProposeMajority', [proposal]);63  }6465  fastTrack(proposalHash: string, votingPeriod: number, delayPeriod: number) {66    return this.helper.constructApiCall('api.tx.democracy.fastTrack', [proposalHash, votingPeriod, delayPeriod]);67  }6869  async referendumVote(signer: TSigner, referendumIndex: number, accountVote: DemocracyStandardAccountVote) {70    await this.helper.executeExtrinsic(signer, 'api.tx.democracy.vote', [referendumIndex, {Standard: accountVote}], true);71  }72}7374class MoonbeamCollectiveGroup extends HelperGroup<MoonbeamHelper> {75  collective: string;7677  constructor(helper: MoonbeamHelper, collective: string) {78    super(helper);7980    this.collective = collective;81  }8283  async propose(signer: TSigner, threshold: number, proposalHash: string, lengthBound: number) {84    await this.helper.executeExtrinsic(signer, `api.tx.${this.collective}.propose`, [threshold, proposalHash, lengthBound], true);85  }8687  async vote(signer: TSigner, proposalHash: string, proposalIndex: number, approve: boolean) {88    await this.helper.executeExtrinsic(signer, `api.tx.${this.collective}.vote`, [proposalHash, proposalIndex, approve], true);89  }9091  async close(signer: TSigner, proposalHash: string, proposalIndex: number, weightBound: any, lengthBound: number) {92    await this.helper.executeExtrinsic(signer, `api.tx.${this.collective}.close`, [proposalHash, proposalIndex, weightBound, lengthBound], true);93  }9495  async proposalCount() {96    return Number(await this.helper.callRpc(`api.query.${this.collective}.proposalCount`, []));97  }98}99100class PolkadexXcmHelperGroup<T extends ChainHelperBase> extends HelperGroup<T> {101  async whitelistToken(signer: TSigner, assetId: any) {102    await this.helper.executeExtrinsic(signer, 'api.tx.xcmHelper.whitelistToken', [assetId], true);103  }104}105export class RelayHelper extends XcmChainHelper {106  balance: SubstrateBalanceGroup<RelayHelper>;107  xcm: XcmGroup<RelayHelper>;108109  constructor(logger?: ILogger, options: { [key: string]: any } = {}) {110    super(logger, options.helperBase ?? RelayHelper);111112    this.balance = new SubstrateBalanceGroup(this);113    this.xcm = new XcmGroup(this, 'xcmPallet');114  }115}116117export class WestmintHelper extends XcmChainHelper {118  balance: SubstrateBalanceGroup<WestmintHelper>;119  xcm: XcmGroup<WestmintHelper>;120  assets: AssetsGroup<WestmintHelper>;121  xTokens: XTokensGroup<WestmintHelper>;122123  constructor(logger?: ILogger, options: { [key: string]: any } = {}) {124    super(logger, options.helperBase ?? WestmintHelper);125126    this.balance = new SubstrateBalanceGroup(this);127    this.xcm = new XcmGroup(this, 'polkadotXcm');128    this.assets = new AssetsGroup(this);129    this.xTokens = new XTokensGroup(this);130  }131}132133export class MoonbeamHelper extends XcmChainHelper {134  balance: EthereumBalanceGroup<MoonbeamHelper>;135  assetManager: MoonbeamAssetManagerGroup;136  assets: AssetsGroup<MoonbeamHelper>;137  xTokens: XTokensGroup<MoonbeamHelper>;138  democracy: MoonbeamDemocracyGroup;139  collective: {140    council: MoonbeamCollectiveGroup,141    techCommittee: MoonbeamCollectiveGroup,142  };143144  constructor(logger?: ILogger, options: { [key: string]: any } = {}) {145    super(logger, options.helperBase ?? MoonbeamHelper);146147    this.balance = new EthereumBalanceGroup(this);148    this.assetManager = new MoonbeamAssetManagerGroup(this);149    this.assets = new AssetsGroup(this);150    this.xTokens = new XTokensGroup(this);151    this.democracy = new MoonbeamDemocracyGroup(this, options);152    this.collective = {153      council: new MoonbeamCollectiveGroup(this, 'councilCollective'),154      techCommittee: new MoonbeamCollectiveGroup(this, 'techCommitteeCollective'),155    };156  }157}158159export class AstarHelper extends XcmChainHelper {160  balance: SubstrateBalanceGroup<AstarHelper>;161  assets: AssetsGroup<AstarHelper>;162  xcm: XcmGroup<AstarHelper>;163164  constructor(logger?: ILogger, options: { [key: string]: any } = {}) {165    super(logger, options.helperBase ?? AstarHelper);166167    this.balance = new SubstrateBalanceGroup(this);168    this.assets = new AssetsGroup(this);169    this.xcm = new XcmGroup(this, 'polkadotXcm');170  }171}172173export class AcalaHelper extends XcmChainHelper {174  balance: SubstrateBalanceGroup<AcalaHelper>;175  assetRegistry: AcalaAssetRegistryGroup;176  xTokens: XTokensGroup<AcalaHelper>;177  tokens: TokensGroup<AcalaHelper>;178  xcm: XcmGroup<AcalaHelper>;179180  constructor(logger?: ILogger, options: { [key: string]: any } = {}) {181    super(logger, options.helperBase ?? AcalaHelper);182183    this.balance = new SubstrateBalanceGroup(this);184    this.assetRegistry = new AcalaAssetRegistryGroup(this);185    this.xTokens = new XTokensGroup(this);186    this.tokens = new TokensGroup(this);187    this.xcm = new XcmGroup(this, 'polkadotXcm');188  }189}190191export class PolkadexHelper extends XcmChainHelper {192  assets: AssetsGroup<PolkadexHelper>;193  balance: SubstrateBalanceGroup<PolkadexHelper>;194  xTokens: XTokensGroup<PolkadexHelper>;195  xcm: XcmGroup<PolkadexHelper>;196  xcmHelper: PolkadexXcmHelperGroup<PolkadexHelper>;197198  constructor(logger?: ILogger, options: { [key: string]: any } = {}) {199    super(logger, options.helperBase ?? PolkadexHelper);200201    this.assets = new AssetsGroup(this);202    this.balance = new SubstrateBalanceGroup(this);203    this.xTokens = new XTokensGroup(this);204    this.xcm = new XcmGroup(this, 'polkadotXcm');205    this.xcmHelper = new PolkadexXcmHelperGroup(this);206  }207}208