@moonbeam-network/xcm-sdk 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +1 -0
  3. package/build/cjs/src/contracts/XTokensContract/XTokensABI.json +94 -0
  4. package/build/cjs/src/contracts/XTokensContract/XTokensContract.d.ts +11 -0
  5. package/build/cjs/src/contracts/XTokensContract/XTokensContract.js +44 -0
  6. package/build/cjs/src/contracts/XTokensContract/XTokensContract.js.map +1 -0
  7. package/build/cjs/src/contracts/XTokensContract/index.d.ts +1 -0
  8. package/build/cjs/src/contracts/XTokensContract/index.js +6 -0
  9. package/build/cjs/src/contracts/XTokensContract/index.js.map +1 -0
  10. package/build/cjs/src/contracts/index.d.ts +1 -0
  11. package/build/cjs/src/contracts/index.js +18 -0
  12. package/build/cjs/src/contracts/index.js.map +1 -0
  13. package/build/cjs/src/index.d.ts +3 -0
  14. package/build/cjs/src/index.js +20 -0
  15. package/build/cjs/src/index.js.map +1 -0
  16. package/build/cjs/src/polkadot/PolkadotService.d.ts +29 -0
  17. package/build/cjs/src/polkadot/PolkadotService.js +132 -0
  18. package/build/cjs/src/polkadot/PolkadotService.js.map +1 -0
  19. package/build/cjs/src/polkadot/index.d.ts +3 -0
  20. package/build/cjs/src/polkadot/index.js +20 -0
  21. package/build/cjs/src/polkadot/index.js.map +1 -0
  22. package/build/cjs/src/polkadot/polkadot.api.d.ts +2 -0
  23. package/build/cjs/src/polkadot/polkadot.api.js +30 -0
  24. package/build/cjs/src/polkadot/polkadot.api.js.map +1 -0
  25. package/build/cjs/src/polkadot/polkadot.interfaces.d.ts +12 -0
  26. package/build/cjs/src/polkadot/polkadot.interfaces.js +3 -0
  27. package/build/cjs/src/polkadot/polkadot.interfaces.js.map +1 -0
  28. package/build/cjs/src/polkadot/polkadot.utils.d.ts +4 -0
  29. package/build/cjs/src/polkadot/polkadot.utils.js +26 -0
  30. package/build/cjs/src/polkadot/polkadot.utils.js.map +1 -0
  31. package/build/cjs/src/sdk/index.d.ts +3 -0
  32. package/build/cjs/src/sdk/index.js +23 -0
  33. package/build/cjs/src/sdk/index.js.map +1 -0
  34. package/build/cjs/src/sdk/sdk.d.ts +2 -0
  35. package/build/cjs/src/sdk/sdk.interfaces.d.ts +94 -0
  36. package/build/cjs/src/sdk/sdk.interfaces.js +10 -0
  37. package/build/cjs/src/sdk/sdk.interfaces.js.map +1 -0
  38. package/build/cjs/src/sdk/sdk.js +164 -0
  39. package/build/cjs/src/sdk/sdk.js.map +1 -0
  40. package/build/cjs/src/sdk/sdk.utils.d.ts +18 -0
  41. package/build/cjs/src/sdk/sdk.utils.js +93 -0
  42. package/build/cjs/src/sdk/sdk.utils.js.map +1 -0
  43. package/build/mjs/src/contracts/XTokensContract/XTokensABI.json +94 -0
  44. package/build/mjs/src/contracts/XTokensContract/XTokensContract.d.ts +11 -0
  45. package/build/mjs/src/contracts/XTokensContract/XTokensContract.js +37 -0
  46. package/build/mjs/src/contracts/XTokensContract/XTokensContract.js.map +1 -0
  47. package/build/mjs/src/contracts/XTokensContract/index.d.ts +1 -0
  48. package/build/mjs/src/contracts/XTokensContract/index.js +2 -0
  49. package/build/mjs/src/contracts/XTokensContract/index.js.map +1 -0
  50. package/build/mjs/src/contracts/index.d.ts +1 -0
  51. package/build/mjs/src/contracts/index.js +2 -0
  52. package/build/mjs/src/contracts/index.js.map +1 -0
  53. package/build/mjs/src/index.d.ts +3 -0
  54. package/build/mjs/src/index.js +4 -0
  55. package/build/mjs/src/index.js.map +1 -0
  56. package/build/mjs/src/polkadot/PolkadotService.d.ts +29 -0
  57. package/build/mjs/src/polkadot/PolkadotService.js +128 -0
  58. package/build/mjs/src/polkadot/PolkadotService.js.map +1 -0
  59. package/build/mjs/src/polkadot/index.d.ts +3 -0
  60. package/build/mjs/src/polkadot/index.js +4 -0
  61. package/build/mjs/src/polkadot/index.js.map +1 -0
  62. package/build/mjs/src/polkadot/polkadot.api.d.ts +2 -0
  63. package/build/mjs/src/polkadot/polkadot.api.js +23 -0
  64. package/build/mjs/src/polkadot/polkadot.api.js.map +1 -0
  65. package/build/mjs/src/polkadot/polkadot.interfaces.d.ts +12 -0
  66. package/build/mjs/src/polkadot/polkadot.interfaces.js +2 -0
  67. package/build/mjs/src/polkadot/polkadot.interfaces.js.map +1 -0
  68. package/build/mjs/src/polkadot/polkadot.utils.d.ts +4 -0
  69. package/build/mjs/src/polkadot/polkadot.utils.js +21 -0
  70. package/build/mjs/src/polkadot/polkadot.utils.js.map +1 -0
  71. package/build/mjs/src/sdk/index.d.ts +3 -0
  72. package/build/mjs/src/sdk/index.js +4 -0
  73. package/build/mjs/src/sdk/index.js.map +1 -0
  74. package/build/mjs/src/sdk/sdk.d.ts +2 -0
  75. package/build/mjs/src/sdk/sdk.interfaces.d.ts +94 -0
  76. package/build/mjs/src/sdk/sdk.interfaces.js +7 -0
  77. package/build/mjs/src/sdk/sdk.interfaces.js.map +1 -0
  78. package/build/mjs/src/sdk/sdk.js +160 -0
  79. package/build/mjs/src/sdk/sdk.js.map +1 -0
  80. package/build/mjs/src/sdk/sdk.utils.d.ts +18 -0
  81. package/build/mjs/src/sdk/sdk.utils.js +85 -0
  82. package/build/mjs/src/sdk/sdk.utils.js.map +1 -0
  83. package/package.json +52 -0
@@ -0,0 +1,128 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _PolkadotService_api;
13
+ import '@moonbeam-network/api-augment';
14
+ import { get } from 'lodash';
15
+ import { getPolkadotApi } from './polkadot.api';
16
+ import { calculateMin } from './polkadot.utils';
17
+ export class PolkadotService {
18
+ constructor(api) {
19
+ _PolkadotService_api.set(this, void 0);
20
+ __classPrivateFieldSet(this, _PolkadotService_api, api, "f");
21
+ }
22
+ static async create(ws) {
23
+ return new PolkadotService(await getPolkadotApi(ws));
24
+ }
25
+ static getChainMin(weight, unitsPerSecond) {
26
+ return calculateMin(weight, unitsPerSecond);
27
+ }
28
+ getMetadata() {
29
+ return {
30
+ decimals: __classPrivateFieldGet(this, _PolkadotService_api, "f").registry.chainDecimals.at(0) || 12,
31
+ symbol: __classPrivateFieldGet(this, _PolkadotService_api, "f").registry.chainTokens.at(0),
32
+ };
33
+ }
34
+ getExistentialDeposit() {
35
+ return __classPrivateFieldGet(this, _PolkadotService_api, "f").consts.balances?.existentialDeposit.toBigInt() || 0n;
36
+ }
37
+ async getAssetDecimals(assetId) {
38
+ const meta = await this.getAssetMeta(assetId);
39
+ return meta.decimals.toNumber();
40
+ }
41
+ async getAssetMeta(assetId) {
42
+ // TODO: how to fix any?
43
+ return __classPrivateFieldGet(this, _PolkadotService_api, "f").query.assets.metadata(assetId);
44
+ }
45
+ async subscribeToAccountInfo(account, callback) {
46
+ return __classPrivateFieldGet(this, _PolkadotService_api, "f").query.system.account(account, callback);
47
+ }
48
+ async subscribeToBalance(account, callback) {
49
+ return this.subscribeToAccountInfo(account, ({ data }) => callback(data.free.toBigInt() - data.miscFrozen.toBigInt()));
50
+ }
51
+ async getGenericBalance(account, { pallet, function: fn, getParams, path, calc }) {
52
+ const response = await __classPrivateFieldGet(this, _PolkadotService_api, "f").query[pallet][fn](...getParams(account));
53
+ if (response.isEmpty) {
54
+ return 0n;
55
+ }
56
+ // TODO: improve types here and in balance interfaces
57
+ const unwrapped = response.unwrap?.() || response;
58
+ return calc(path.length ? get(unwrapped, path) : unwrapped);
59
+ }
60
+ async getAssetMinBalance({ pallet, function: fn, params, path, }) {
61
+ const details = await __classPrivateFieldGet(this, _PolkadotService_api, "f").query[pallet][fn](...params);
62
+ if (details.isEmpty) {
63
+ return 0n;
64
+ }
65
+ return get(details, path).toBigInt();
66
+ }
67
+ getXcmExtrinsic(account, amount, { pallet, extrinsic, getParams }, fee, primaryAccount) {
68
+ let transferExtrinsic = __classPrivateFieldGet(this, _PolkadotService_api, "f").tx[pallet][extrinsic](
69
+ // TODO: check issue with types and if we can fix it
70
+ // @ts-ignore
71
+ ...getParams(account, amount, fee));
72
+ if (primaryAccount) {
73
+ transferExtrinsic = __classPrivateFieldGet(this, _PolkadotService_api, "f").tx.proxy.proxy(primaryAccount, null, transferExtrinsic);
74
+ }
75
+ return transferExtrinsic;
76
+ }
77
+ async getAssetFee(id, weight) {
78
+ const type = await this.getAssetType(id);
79
+ if (!type) {
80
+ return 0n;
81
+ }
82
+ const unitsPerSecond = await __classPrivateFieldGet(this, _PolkadotService_api, "f").query.assetManager.assetTypeUnitsPerSecond(type);
83
+ return calculateMin(weight, unitsPerSecond.unwrapOrDefault().toBigInt());
84
+ }
85
+ async getAssetType(id) {
86
+ const type = await __classPrivateFieldGet(this, _PolkadotService_api, "f").query.assetManager.assetIdType(id);
87
+ return type.unwrapOr(undefined);
88
+ }
89
+ async subscribeToAssetsBalanceInfo(account, configGetter, callback) {
90
+ const assetsArray = Object.values(configGetter.assets);
91
+ const ids = assetsArray.map((asset) => asset.id);
92
+ const metadata = (await __classPrivateFieldGet(this, _PolkadotService_api, "f").query.assets.metadata.multi(ids));
93
+ return this.subscribeToAccountBalances(account, ids, (data) => {
94
+ callback(data.map((balance, index) => {
95
+ const asset = assetsArray[index];
96
+ const meta = metadata[index];
97
+ const { chains: [chain], from, } = configGetter.deposit(asset.originSymbol);
98
+ // TODO: remove as
99
+ const { origin } = from(chain.chain);
100
+ return {
101
+ asset,
102
+ balance: balance.balance.toBigInt(),
103
+ meta: {
104
+ decimals: asset.isNative
105
+ ? origin.decimals
106
+ : meta.decimals.toNumber(),
107
+ symbol: asset.isNative
108
+ ? asset.originSymbol
109
+ : meta.symbol.toHuman()?.toString() || '',
110
+ originSymbol: asset.isNative
111
+ ? asset.originSymbol
112
+ : meta.name.toHuman()?.toString(),
113
+ },
114
+ origin,
115
+ };
116
+ }));
117
+ });
118
+ }
119
+ async subscribeToAccountBalances(account, ids, callback) {
120
+ const keys = ids.map((x) => [x, account]);
121
+ return __classPrivateFieldGet(this, _PolkadotService_api, "f").query.assets.account.multi(keys, (res) => {
122
+ const response = res.map((balance) => balance.unwrapOrDefault());
123
+ callback(response);
124
+ });
125
+ }
126
+ }
127
+ _PolkadotService_api = new WeakMap();
128
+ //# sourceMappingURL=PolkadotService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolkadotService.js","sourceRoot":"","sources":["../../../../src/polkadot/PolkadotService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './polkadot.api';
2
+ export * from './polkadot.interfaces';
3
+ export * from './PolkadotService';
@@ -0,0 +1,4 @@
1
+ export * from './polkadot.api';
2
+ export * from './polkadot.interfaces';
3
+ export * from './PolkadotService';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/polkadot/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ApiPromise } from '@polkadot/api';
2
+ export declare function getPolkadotApi(ws: string): Promise<ApiPromise>;
@@ -0,0 +1,23 @@
1
+ import { ApiPromise, WsProvider } from '@polkadot/api';
2
+ import LRU from 'lru-cache';
3
+ const tenMin = 10 * 60 * 1000;
4
+ const cache = new LRU({
5
+ max: 20,
6
+ ttl: tenMin,
7
+ updateAgeOnGet: true,
8
+ ttlAutopurge: true,
9
+ dispose: (api) => api.isConnected && api.disconnect(),
10
+ });
11
+ export async function getPolkadotApi(ws) {
12
+ const cached = cache.get(ws);
13
+ if (cached) {
14
+ return cached;
15
+ }
16
+ const newApi = await ApiPromise.create({
17
+ provider: new WsProvider(ws),
18
+ });
19
+ await newApi.isReady;
20
+ cache.set(ws, newApi);
21
+ return newApi;
22
+ }
23
+ //# sourceMappingURL=polkadot.api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polkadot.api.js","sourceRoot":"","sources":["../../../../src/polkadot/polkadot.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,GAAG,MAAM,WAAW,CAAC;AAE5B,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAqB;IACxC,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,MAAM;IACX,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,CAAC,GAAe,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,EAAE;CAClE,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAU;IAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE7B,IAAI,MAAM,EAAE;QACV,OAAO,MAAM,CAAC;KACf;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC;QACrC,QAAQ,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC;KAC7B,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,CAAC;IAErB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAEtB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Asset, AssetConfig, ChainConfig, MoonChainConfig } from '@moonbeam-network/xcm-config';
2
+ export interface AssetMetadata<Assets extends Asset = Asset> {
3
+ decimals: number;
4
+ symbol: string;
5
+ originSymbol?: Assets;
6
+ }
7
+ export interface AssetBalanceInfo<Assets extends Asset = Asset> {
8
+ asset: AssetConfig<Assets>;
9
+ balance: bigint;
10
+ meta: AssetMetadata<Assets>;
11
+ origin: ChainConfig | MoonChainConfig;
12
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=polkadot.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polkadot.interfaces.js","sourceRoot":"","sources":["../../../../src/polkadot/polkadot.interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { Asset } from '@moonbeam-network/xcm-config';
2
+ import { AssetBalanceInfo } from './polkadot.interfaces';
3
+ export declare function calculateMin(weight: number, unitsPerSecond: bigint): bigint;
4
+ export declare function sortByBalanceAndChainName<Assets extends Asset = Asset>(a: AssetBalanceInfo<Assets>, b: AssetBalanceInfo<Assets>): number;
@@ -0,0 +1,21 @@
1
+ export function calculateMin(weight, unitsPerSecond) {
2
+ // 10**12 weight = 1 second
3
+ return (BigInt(weight) * unitsPerSecond) / BigInt(10 ** 12);
4
+ }
5
+ export function sortByBalanceAndChainName(a, b) {
6
+ const aBalance = Number((a.balance * 1000000n) / 10n ** BigInt(a.meta.decimals)) / 1000000;
7
+ const bBalance = Number((b.balance * 1000000n) / 10n ** BigInt(b.meta.decimals)) / 1000000;
8
+ if (aBalance || bBalance) {
9
+ return bBalance - aBalance;
10
+ }
11
+ if ((a.origin.name + a.asset.originSymbol).toLowerCase() <
12
+ (b.origin.name + b.asset.originSymbol).toLowerCase()) {
13
+ return -1;
14
+ }
15
+ if ((a.origin.name + a.asset.originSymbol).toLowerCase() >
16
+ (b.origin.name + b.asset.originSymbol).toLowerCase()) {
17
+ return 1;
18
+ }
19
+ return 0;
20
+ }
21
+ //# sourceMappingURL=polkadot.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polkadot.utils.js","sourceRoot":"","sources":["../../../../src/polkadot/polkadot.utils.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,cAAsB;IACjE,2BAA2B;IAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,CAA2B,EAC3B,CAA2B;IAE3B,MAAM,QAAQ,GACZ,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC;IAC5E,MAAM,QAAQ,GACZ,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC;IAE5E,IAAI,QAAQ,IAAI,QAAQ,EAAE;QACxB,OAAO,QAAQ,GAAG,QAAQ,CAAC;KAC5B;IAED,IACE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;QACpD,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EACpD;QACA,OAAO,CAAC,CAAC,CAAC;KACX;IAED,IACE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;QACpD,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EACpD;QACA,OAAO,CAAC,CAAC;KACV;IAED,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './sdk';
2
+ export * from './sdk.interfaces';
3
+ export { isXcmSdkDeposit, isXcmSdkWithdraw } from './sdk.utils';
@@ -0,0 +1,4 @@
1
+ export * from './sdk';
2
+ export * from './sdk.interfaces';
3
+ export { isXcmSdkDeposit, isXcmSdkWithdraw } from './sdk.utils';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sdk/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { SdkOptions, XcmSdkByChain } from './sdk.interfaces';
2
+ export declare function create(options: SdkOptions): Promise<XcmSdkByChain>;
@@ -0,0 +1,94 @@
1
+ import { Asset, AssetConfig, Chain, ChainConfig, MoonbaseAssets, MoonbaseChains, MoonbeamAssets, MoonbeamChains, MoonChainConfig, MoonriverAssets, MoonriverChains } from '@moonbeam-network/xcm-config';
2
+ import { Signer as PolkadotSigner, UnsubscribePromise } from '@polkadot/api/types';
3
+ import { Signer as EthersSigner } from 'ethers';
4
+ import { AssetBalanceInfo } from '../polkadot';
5
+ export declare type Hash = string;
6
+ export interface XcmSdkByChain {
7
+ moonbase: MoonbaseXcmSdk;
8
+ moonbeam: MoonbeamXcmSdk;
9
+ moonriver: MoonriverXcmSdk;
10
+ }
11
+ export declare type MoonXcmSdk = MoonbaseXcmSdk | MoonbeamXcmSdk | MoonriverXcmSdk;
12
+ export declare type MoonbaseXcmSdk = XcmSdk<MoonbaseAssets, MoonbaseChains>;
13
+ export declare type MoonbeamXcmSdk = XcmSdk<MoonbeamAssets, MoonbeamChains>;
14
+ export declare type MoonriverXcmSdk = XcmSdk<MoonriverAssets, MoonriverChains>;
15
+ export interface XcmSdk<Assets extends Asset = Asset, Chains extends Chain = Chain> {
16
+ asset: AssetConfig<Assets>;
17
+ chain: MoonChainConfig;
18
+ subscribeToAssetsBalanceInfo: (account: string, cb: (data: AssetBalanceInfo<Assets>[]) => void) => UnsubscribePromise;
19
+ deposit: (asset: Assets) => XcmSdkDeposit<Assets, Chains>;
20
+ withdraw: (asset: Assets) => XcmSdkWithdraw<Assets, Chains>;
21
+ }
22
+ export interface XcmSdkDeposit<Assets extends Asset = Asset, Chains extends Chain = Chain> {
23
+ chains: ChainConfig[];
24
+ from: (chain: Chains) => XcmSdkDepositFrom<Assets>;
25
+ }
26
+ export interface XcmSdkWithdraw<Assets extends Asset = Asset, Chains extends Chain = Chain> {
27
+ chains: ChainConfig[];
28
+ to: (chain: Chains) => XcmSdkWithdrawTo<Assets>;
29
+ }
30
+ export interface XcmSdkDepositFrom<Assets extends Asset = Asset> {
31
+ get: (account: string, sourceAccount: string, primaryAccount?: string) => Promise<DepositTransferData<Assets>>;
32
+ }
33
+ export interface XcmSdkWithdrawTo<Assets extends Asset = Asset> {
34
+ get: (account: string) => Promise<WithdrawTransferData<Assets>>;
35
+ }
36
+ export interface DepositTransferData<Assets extends Asset = Asset> {
37
+ asset: AssetConfigWithDecimals<Assets>;
38
+ existentialDeposit: bigint;
39
+ min: bigint;
40
+ moonChainFee?: bigint;
41
+ native: AssetConfigWithDecimals<Assets>;
42
+ origin: MoonChainConfig | ChainConfig;
43
+ source: ChainConfig;
44
+ sourceBalance: bigint;
45
+ sourceFeeBalance?: FeeBalance<Assets>;
46
+ sourceMinBalance: bigint;
47
+ getFee: (amount?: bigint) => Promise<bigint>;
48
+ send: (amount: bigint, cb?: (event: ExtrinsicEvent) => void) => Promise<Hash>;
49
+ }
50
+ export interface WithdrawTransferData<Assets extends Asset = Asset> {
51
+ asset: AssetConfigWithDecimals<Assets>;
52
+ destination: ChainConfig;
53
+ destinationBalance: bigint;
54
+ destinationFee: bigint;
55
+ existentialDeposit: bigint;
56
+ min: bigint;
57
+ native: AssetConfigWithDecimals<Assets>;
58
+ origin: MoonChainConfig | ChainConfig;
59
+ getFee: (amount: bigint) => Promise<bigint>;
60
+ send: (amount: bigint, cb?: (event: ExtrinsicEvent) => void) => Promise<Hash>;
61
+ }
62
+ export interface AssetConfigWithDecimals<Assets extends Asset = Asset> extends AssetConfig<Assets> {
63
+ decimals: number;
64
+ }
65
+ export interface FeeBalance<Assets extends Asset = Asset> {
66
+ amount: bigint;
67
+ decimals: number;
68
+ symbol: Assets;
69
+ }
70
+ export interface SdkOptions {
71
+ ethersSigner: EthersSigner;
72
+ polkadotSigner: PolkadotSigner;
73
+ }
74
+ export declare type ExtrinsicEvent = ExtrinsicFailedEvent | ExtrinsicSentEvent | ExtrinsicSuccessEvent;
75
+ export interface ExtrinsicFailedEvent {
76
+ blockHash: Hash;
77
+ message?: string;
78
+ status: ExtrinsicStatus.Failed;
79
+ txHash: Hash;
80
+ }
81
+ export interface ExtrinsicSentEvent {
82
+ status: ExtrinsicStatus.Sent;
83
+ txHash: Hash;
84
+ }
85
+ export interface ExtrinsicSuccessEvent {
86
+ blockHash: Hash;
87
+ status: ExtrinsicStatus.Success;
88
+ txHash: Hash;
89
+ }
90
+ export declare enum ExtrinsicStatus {
91
+ Failed = "Failed",
92
+ Sent = "Sent",
93
+ Success = "Success"
94
+ }
@@ -0,0 +1,7 @@
1
+ export var ExtrinsicStatus;
2
+ (function (ExtrinsicStatus) {
3
+ ExtrinsicStatus["Failed"] = "Failed";
4
+ ExtrinsicStatus["Sent"] = "Sent";
5
+ ExtrinsicStatus["Success"] = "Success";
6
+ })(ExtrinsicStatus || (ExtrinsicStatus = {}));
7
+ //# sourceMappingURL=sdk.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.interfaces.js","sourceRoot":"","sources":["../../../../src/sdk/sdk.interfaces.ts"],"names":[],"mappings":"AA+IA,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,gCAAa,CAAA;IACb,sCAAmB,CAAA;AACrB,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B"}
@@ -0,0 +1,160 @@
1
+ /* eslint-disable @typescript-eslint/no-use-before-define */
2
+ import { moonbase, moonbeam, moonriver, } from '@moonbeam-network/xcm-config';
3
+ import { isUndefined } from '@polkadot/util';
4
+ import { XTokensContract } from '../contracts/XTokensContract';
5
+ import { PolkadotService } from '../polkadot';
6
+ import { sortByBalanceAndChainName } from '../polkadot/polkadot.utils';
7
+ import { createExtrinsicEventHandler, createTransactionEventHandler, getCreateExtrinsic, } from './sdk.utils';
8
+ export async function create(options) {
9
+ return {
10
+ moonbase: await createChainSdk(moonbase, options),
11
+ moonbeam: await createChainSdk(moonbeam, options),
12
+ moonriver: await createChainSdk(moonriver, options),
13
+ };
14
+ }
15
+ async function createChainSdk(configGetter, options) {
16
+ const contract = new XTokensContract(options.ethersSigner);
17
+ const polkadot = await PolkadotService.create(configGetter.chain.ws);
18
+ return {
19
+ asset: configGetter.asset,
20
+ chain: configGetter.chain,
21
+ subscribeToAssetsBalanceInfo: async (account, cb) => {
22
+ let lastBalance = 0n;
23
+ let lastInfo = [];
24
+ const handler = (data) => {
25
+ const isBalance = typeof data === 'bigint';
26
+ lastBalance = isBalance ? data : lastBalance;
27
+ lastInfo = (isBalance ? lastInfo : data)
28
+ .map((info) => {
29
+ if (info.asset.isNative) {
30
+ // eslint-disable-next-line no-param-reassign
31
+ info.balance = lastBalance;
32
+ }
33
+ return info;
34
+ })
35
+ .sort(sortByBalanceAndChainName);
36
+ cb(lastInfo);
37
+ };
38
+ const unsubscribeBalance = await polkadot.subscribeToBalance(account, handler);
39
+ const unsubscribeInfo = await polkadot.subscribeToAssetsBalanceInfo(account, configGetter, handler);
40
+ return () => {
41
+ unsubscribeBalance();
42
+ unsubscribeInfo();
43
+ };
44
+ },
45
+ deposit: (asset) => {
46
+ const { chains, from } = configGetter.deposit(asset);
47
+ return {
48
+ chains,
49
+ from: (chain) => {
50
+ const { asset: assetConfig, origin, config } = from(chain);
51
+ return {
52
+ get: async (account, sourceAccount, primaryAccount) => {
53
+ const foreignPolkadot = await PolkadotService.create(config.origin.ws);
54
+ const meta = foreignPolkadot.getMetadata();
55
+ const nativeAsset = configGetter.assets[meta.symbol];
56
+ const createExtrinsic = getCreateExtrinsic({
57
+ account,
58
+ config,
59
+ foreignPolkadot,
60
+ nativeAsset,
61
+ polkadot,
62
+ primaryAccount,
63
+ });
64
+ const [decimals, sourceBalance, existentialDeposit, sourceFeeBalance, moonChainFee, sourceMinBalance = 0n, min,] = await Promise.all([
65
+ polkadot.getAssetDecimals(assetConfig.id),
66
+ foreignPolkadot.getGenericBalance(sourceAccount, config.balance),
67
+ foreignPolkadot.getExistentialDeposit(),
68
+ config.sourceFeeBalance
69
+ ? foreignPolkadot.getGenericBalance(sourceAccount, config.sourceFeeBalance)
70
+ : undefined,
71
+ config.isNativeAssetPayingMoonFee
72
+ ? polkadot.getAssetFee(nativeAsset.id, config.origin.weight)
73
+ : undefined,
74
+ config.sourceMinBalance
75
+ ? foreignPolkadot.getAssetMinBalance(config.sourceMinBalance)
76
+ : undefined,
77
+ assetConfig.isNative
78
+ ? PolkadotService.getChainMin(config.origin.weight, configGetter.chain.unitsPerSecond)
79
+ : polkadot.getAssetFee(assetConfig.id, config.origin.weight),
80
+ ]);
81
+ return {
82
+ asset: { ...assetConfig, decimals },
83
+ existentialDeposit,
84
+ min,
85
+ moonChainFee,
86
+ native: { ...nativeAsset, decimals: meta.decimals },
87
+ origin,
88
+ source: config.origin,
89
+ sourceBalance,
90
+ sourceFeeBalance: !isUndefined(sourceFeeBalance)
91
+ ? { ...meta, amount: sourceFeeBalance }
92
+ : undefined,
93
+ sourceMinBalance,
94
+ getFee: async (amount = sourceBalance) => {
95
+ if (!sourceFeeBalance) {
96
+ return 0n;
97
+ }
98
+ const extrinsic = await createExtrinsic(amount);
99
+ const info = await extrinsic.paymentInfo(account);
100
+ return info.partialFee.toBigInt();
101
+ },
102
+ send: async (amount, cb) => {
103
+ const extrinsic = await createExtrinsic(amount);
104
+ const hash = await extrinsic.signAndSend(sourceAccount, {
105
+ signer: options.polkadotSigner,
106
+ }, cb && createExtrinsicEventHandler(config, cb));
107
+ return hash.toString();
108
+ },
109
+ };
110
+ },
111
+ };
112
+ },
113
+ };
114
+ },
115
+ withdraw: (asset) => {
116
+ const { chains, to } = configGetter.withdraw(asset);
117
+ return {
118
+ chains,
119
+ to: (chain) => {
120
+ const { asset: assetConfig, origin, config } = to(chain);
121
+ return {
122
+ get: async (destinationAccount) => {
123
+ const destinationPolkadot = await PolkadotService.create(config.destination.ws);
124
+ const meta = destinationPolkadot.getMetadata();
125
+ const nativeAsset = configGetter.assets[meta.symbol];
126
+ const [decimals, destinationBalance, existentialDeposit] = await Promise.all([
127
+ assetConfig.isNative
128
+ ? configGetter.chain.decimals
129
+ : polkadot.getAssetDecimals(assetConfig.id),
130
+ destinationPolkadot.getGenericBalance(destinationAccount, config.balance),
131
+ destinationPolkadot.getExistentialDeposit(),
132
+ ]);
133
+ const destinationFee = BigInt(config.weight * config.feePerWeight);
134
+ const min = destinationFee + existentialDeposit;
135
+ return {
136
+ asset: { ...assetConfig, decimals },
137
+ destination: config.destination,
138
+ destinationBalance,
139
+ destinationFee,
140
+ existentialDeposit,
141
+ min,
142
+ native: { ...nativeAsset, decimals: meta.decimals },
143
+ origin,
144
+ getFee: async (amount) => contract.getTransferFees(destinationAccount, amount, assetConfig, config),
145
+ send: async (amount, cb) => {
146
+ const tx = await contract.transfer(destinationAccount, amount, assetConfig, config);
147
+ if (cb) {
148
+ createTransactionEventHandler(options.ethersSigner, tx.hash, cb);
149
+ }
150
+ return tx.hash;
151
+ },
152
+ };
153
+ },
154
+ };
155
+ },
156
+ };
157
+ },
158
+ };
159
+ }
160
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../../src/sdk/sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Asset, AssetConfig, Chain, DepositConfig } from '@moonbeam-network/xcm-config';
2
+ import { ISubmittableResult } from '@polkadot/types/types';
3
+ import { Signer as EthersSigner } from 'ethers';
4
+ import { PolkadotService } from '../polkadot';
5
+ import { ExtrinsicEvent, Hash, XcmSdkDeposit, XcmSdkWithdraw } from './sdk.interfaces';
6
+ export declare function isXcmSdkDeposit(config: XcmSdkDeposit | XcmSdkWithdraw): config is XcmSdkDeposit;
7
+ export declare function isXcmSdkWithdraw(config: XcmSdkDeposit | XcmSdkWithdraw): config is XcmSdkWithdraw;
8
+ export declare function createExtrinsicEventHandler<Assets extends Asset = Asset>(config: DepositConfig<Assets>, cb: (event: ExtrinsicEvent) => void): ({ events, status, txHash }: ISubmittableResult) => void;
9
+ export declare function createTransactionEventHandler(ethersSigner: EthersSigner, txHash: Hash, cb: (event: ExtrinsicEvent) => void, skipSentEvent?: boolean): Promise<void>;
10
+ export interface CreateExtrinsicOptions<Assets extends Asset = Asset, Chains extends Chain = Chain> {
11
+ account: string;
12
+ config: DepositConfig<Assets>;
13
+ foreignPolkadot: PolkadotService<Assets, Chains>;
14
+ nativeAsset: AssetConfig<Assets>;
15
+ polkadot: PolkadotService<Assets, Chains>;
16
+ primaryAccount?: string;
17
+ }
18
+ export declare function getCreateExtrinsic<Assets extends Asset = Asset>({ account, config, foreignPolkadot, nativeAsset, polkadot, primaryAccount, }: CreateExtrinsicOptions<Assets>): (amount: bigint) => Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", ISubmittableResult>>;
@@ -0,0 +1,85 @@
1
+ import { isMultiCurrency, PolkadotXcmExtrinsicSuccessEvent, } from '@moonbeam-network/xcm-config';
2
+ import { ExtrinsicStatus, } from './sdk.interfaces';
3
+ export function isXcmSdkDeposit(config) {
4
+ return !!config.from;
5
+ }
6
+ export function isXcmSdkWithdraw(config) {
7
+ return !!config.to;
8
+ }
9
+ export function createExtrinsicEventHandler(config, cb) {
10
+ return ({ events = [], status, txHash }) => {
11
+ const hash = txHash.toHex();
12
+ if (status.isReady) {
13
+ cb({ status: ExtrinsicStatus.Sent, txHash: hash });
14
+ }
15
+ if (status.isInBlock) {
16
+ const block = status.asInBlock.toString();
17
+ events.forEach(({ event: { data, method, section } }) => {
18
+ if (section === config.extrinsic.pallet &&
19
+ method === config.extrinsic.successEvent) {
20
+ if (method === PolkadotXcmExtrinsicSuccessEvent.Attempted) {
21
+ const eventData = data.at(0);
22
+ if (eventData.isIncomplete) {
23
+ cb({
24
+ status: ExtrinsicStatus.Failed,
25
+ blockHash: block,
26
+ txHash: hash,
27
+ message: eventData.asIncomplete.toHuman().join('; '),
28
+ });
29
+ return;
30
+ }
31
+ }
32
+ cb({
33
+ status: ExtrinsicStatus.Success,
34
+ blockHash: block,
35
+ txHash: hash,
36
+ });
37
+ }
38
+ if (section === 'system' && method === 'ExtrinsicFailed') {
39
+ cb({
40
+ status: ExtrinsicStatus.Failed,
41
+ blockHash: block,
42
+ txHash: hash,
43
+ message: data.join('; '),
44
+ });
45
+ }
46
+ });
47
+ }
48
+ };
49
+ }
50
+ export async function createTransactionEventHandler(ethersSigner, txHash, cb, skipSentEvent = false) {
51
+ if (!ethersSigner.provider) {
52
+ throw new Error('options.ethersSigner has not provider');
53
+ }
54
+ if (!skipSentEvent) {
55
+ cb({ status: ExtrinsicStatus.Sent, txHash });
56
+ }
57
+ const tx = await ethersSigner.provider.getTransactionReceipt(txHash);
58
+ if (!tx) {
59
+ setTimeout(() => createTransactionEventHandler(ethersSigner, txHash, cb, true), 2000);
60
+ return;
61
+ }
62
+ if (tx.status === 1) {
63
+ cb({
64
+ status: ExtrinsicStatus.Success,
65
+ blockHash: tx.blockHash,
66
+ txHash,
67
+ });
68
+ }
69
+ else {
70
+ cb({
71
+ status: ExtrinsicStatus.Failed,
72
+ blockHash: tx.blockHash,
73
+ txHash,
74
+ });
75
+ }
76
+ }
77
+ export function getCreateExtrinsic({ account, config, foreignPolkadot, nativeAsset, polkadot, primaryAccount, }) {
78
+ return async (amount) => {
79
+ const fee = isMultiCurrency(config.extrinsic)
80
+ ? await polkadot.getAssetFee(nativeAsset.id, config.origin.weight)
81
+ : 0n;
82
+ return foreignPolkadot.getXcmExtrinsic(account, amount, config.extrinsic, fee, primaryAccount);
83
+ };
84
+ }
85
+ //# sourceMappingURL=sdk.utils.js.map